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
- 1. Generator CMake dla Visual Studio Linux na różnych platformach
- 2. Enchant słownika na różnych platformach
- 3. Użycie wskaźników pustych przestrzeni na różnych platformach
- 4. CMake include path
- 5. Proste API TCP/IP na różnych platformach?
- 6. Konsekwentne liczby pseudolosowe na różnych platformach
- 7. OpenGL + Qt przy użyciu CMake
- 8. Czy istnieje sposób na zlokalizowanie aplikacji na różnych platformach?
- 9. rzeczy, które uniemożliwiają pracę na różnych platformach aplikacji WWW java
- 10. Wieloplatformowe C++: użyj natywnego kodowania lub standaryzacji na różnych platformach?
- 11. Synchronizacja wersje artefaktów na różnych platformach z procesu uwalniania Maven
- 12. C lub C++ dla tworzenia aplikacji mobilnych na różnych platformach?
- 13. Pozostań na ruchomych platformach
- 14. Rozwijanie gry międzyplatformowej, z programistami na wielu platformach
- 15. Błąd CMake: Zmienne są ustawione na NOTFOUND
- 16. Czy nazwane funkcje są niedoceniane w JavaScript?
- 17. Appium: Czy można go używać do testowania aplikacji na różnych platformach?
- 18. Skalowanie widoku OpenGL dla różnych DPI
- 19. Uruchamianie CMake na Windows
- 20. Funkcje rekursywne PHP działają inaczej w różnych wersjach?
- 21. Dlaczego funkcja C++ stdlib rand() daje różne wartości dla tego samego materiału siewnego na różnych platformach?
- 22. C ekspresji oceny inaczej w dwóch różnych kompilatorów
- 23. Program Qt wdrożyć na wielu platformach, jak?
- 24. Renderowanie wielowątkowe na OpenGL
- 25. Jaki jest obecny stan obsługi "thread_local" na platformach?
- 26. Prędkość: Czy lepiej użyć instrukcji Velocity Macro lub #include (...) dla bloku DIV powtarzanego wiele razy na różnych stronach?
- 27. Dlaczego te fragmenty są inaczej obsługiwane przez GCC?
- 28. Jak zastosować różne opcje kompilatora dla różnych kompilatorów w cmake?
- 29. Układ wyświetlany inaczej na różnych urządzeniach na tym samym ekranie rozdzielczości
- 30. W jaki sposób parametry nazwane są przekazywane do pliku wsadowego?
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