2013-04-24 12 views
5

Cmake founds zawiera katalog dla opengl, ale nagłówki opengl znajdują się w podkatalogu o innej nazwie na różnych platformach (i, być może, kompilatorach): gl na Windows, GL na Linuxie , OpenGL (o ile wiem) na Macu. Dlatego dodanie OPENGL_INCLUDE_DIRECTORY do ścieżek nie pomaga bardzo - nadal muszę uwzględnić (lub, i tak dalej) w moich źródłach. Jak mam sobie z tym radzić?CMake: opengl include dirs nazwane są inaczej na różnych platformach

+0

Próbowałaś komendę 'find_package (OpenGL)'? Nie rozumiem z twojego pytania, które już zrobiłeś, czy nie. – Morwenn

+0

Oczywiście, że tak. Bez tego zmienna OPENGL_INCLUDE_DIRECTORY byłaby pusta. – lisyarus

+0

OK, moja zła, nie byłem pewien. Wtedy nie sądzę, że istnieje jakaś ogólna metoda, oprócz zmuszania użytkowników do zmiany nazw ich katalogów. Ale wydaje mi się to dziwne: widziałem tylko katalog 'GL', niezależnie od systemu operacyjnego. – Morwenn

Odpowiedz

6

Zakładam, że masz na myśli OPENGL_INCLUDE_DIR, a nie OPENGL_INCLUDE_DIRECTORY.

Masz tu kilka opcji do wyboru. Najprostszym jest dodanie ${OPENGL_INCLUDE_DIR}/GL lub ${OPENGL_INCLUDE_DIR}/OpenGL do Twojego zawierać ścieżki wyszukiwania i korzystania

#include "gl.h" 

w kodzie źródłowym.

Przypadek nazwach jest uwzględniana w systemie Windows, dzięki czemu nie trzeba używać /gli/GL - wystarczy /GL zrobi.

Aby to osiągnąć, w CMakeLists.txt zrobić:

if(APPLE) 
    include_directories(${OPENGL_INCLUDE_DIR}/OpenGL) 
else() 
    include_directories(${OPENGL_INCLUDE_DIR}/GL) 
endif() 


Aby to nieco bardziej wytrzymałe, można mieć CUpewnij znaleźć drogę do "gl.h" i obejmują że:

find_path(OpenglIncludeSubdir 
      NAMES gl.h 
      PATHS ${OPENGL_INCLUDE_DIR} 
      PATH_SUFFIXES GL OpenGL 
      NO_DEFAULT_PATH) 
include_directories(${OpenglIncludeSubdir}) 

Ponownie w źródle ty chcesz używać:

#include "gl.h" 


Prawdopodobnie najbardziej wytrzymały (tj. unikanie dalszego włączania ścieżek poza numer ${OPENGL_INCLUDE_DIR}) byłoby znaleźć ścieżkę do "gl.h", a następnie użyć configure_file, aby zastosować poprawny termin #include. należałoby użyć plik wejściowy, który zawierał coś takiego:

#include "@[email protected]/gl.h" 

a następnie uruchomiony configure_file zastąpi @[email protected] z jego wartości i zapisać zawartość do pliku wyjściowego. Ten plik wyjściowy będzie wtedy być zawarte w docelowej i musiałby

#include "GL/gl.h" 

lub

#include "OpenGL/gl.h" 

jako właściwe.

Aby to osiągnąć, można zrobić coś takiego:

find_file(OpenglSubdir 
      NAMES GL OpenGL 
      PATHS ${OPENGL_INCLUDE_DIR} 
      NO_DEFAULT_PATH) 
get_filename_component(OpenglSubdir ${OpenglSubdir} NAME) 
configure_file(${CMAKE_SOURCE_DIR}/my_config.h.in ${CMAKE_SOURCE_DIR}/my_config.h) 
+0

Wielkie dzięki, wydaje się, że mam mnóstwo rozwiązań teraz :) – lisyarus

+2

Niestety, wydaje się, że to nie będzie działać z Windows, ponieważ CMake najwyraźniej nie ustawia 'OPENGL_INCLUDE_DIR' na Windowsie. Wydaje się to być świadomą decyzją, opartą na [tym wpisie na liście mailingowej z września 2004 r.] (Https://cmake.org/pipermail/cmake/2004-September/005508.html) i wydaje się, że to się nie zmieniło interweniująca dekada. – awksp

Powiązane problemy