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
Odpowiedz
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ć /gl
i/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)
Wielkie dzięki, wydaje się, że mam mnóstwo rozwiązań teraz :) – lisyarus
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
Próbowałaś komendę 'find_package (OpenGL)'? Nie rozumiem z twojego pytania, które już zrobiłeś, czy nie. – Morwenn
Oczywiście, że tak. Bez tego zmienna OPENGL_INCLUDE_DIRECTORY byłaby pusta. – lisyarus
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