Cmake founds include Verzeichnis für opengl, aber Opengl Header sind in einem Unterverzeichnis, das auf verschiedenen Plattformen (und vielleicht Compiler) unterschiedlich benannt wird: gl unter Windows, GL unter Linux , OpenGL (soweit ich weiß) auf Mac. Das Hinzufügen von OPENGL_INCLUDE_DIRECTORY zum Einschließen von Pfaden hilft also nicht sehr - ich muss immer noch (oder, und ...) in meine Quellen aufnehmen. Wie soll ich damit umgehen?CMake: opengl include dirs sind unterschiedlich auf verschiedenen Plattformen
Antwort
Ich nehme an, Sie meinen OPENGL_INCLUDE_DIR
, nicht OPENGL_INCLUDE_DIRECTORY
.
Sie haben hier eine Auswahl. Am einfachsten ist es ${OPENGL_INCLUDE_DIR}/GL
oder ${OPENGL_INCLUDE_DIR}/OpenGL
hinzufügen, um Ihre Suchpfade umfassen und
#include "gl.h"
im Quellcode verwenden.
Der Fall von Dateinamen unter Windows nicht berücksichtigt, so müssen Sie nicht /GL
/gl
und verwenden - einfach /GL
tun.
Um dies zu erreichen, in Ihrem CMakeLists.txt tun:
if(APPLE)
include_directories(${OPENGL_INCLUDE_DIR}/OpenGL)
else()
include_directories(${OPENGL_INCLUDE_DIR}/GL)
endif()
diese robustere ein bisschen zu machen, können Sie CMake den Weg finden müssen "gl.h" und schließen dass:
find_path(OpenglIncludeSubdir
NAMES gl.h
PATHS ${OPENGL_INCLUDE_DIR}
PATH_SUFFIXES GL OpenGL
NO_DEFAULT_PATH)
include_directories(${OpenglIncludeSubdir})
Wieder in Ihrer Quelle, dann würden Sie verwenden:
#include "gl.h"
Möglicherweise am robustesten (d. H. Vermeiden Sie weitere Include-Pfade über ${OPENGL_INCLUDE_DIR}
) wäre, den Pfad zu "gl.h" zu finden und dann configure_file
zu verwenden, um den korrekten #include
Begriff anzuwenden.
#include "@[email protected]/gl.h"
und dann configure_file
laufen würde ersetzen @[email protected]
mit seinem Wert und den Inhalt in eine Ausgabedatei schreiben: Sie würde eine Eingabedatei, die wie etwas enthalten verwenden. Diese Ausgabedatei würde dann in Ihrem Ziel aufgenommen werden und
#include "GL/gl.h"
oder
#include "OpenGL/gl.h"
gegebenenfalls hätte.
Um dies zu erreichen, würden Sie so etwas wie tun:
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)
Vielen Dank, es scheint, dass ich jetzt viele Lösungen habe :) – lisyarus
Leider scheint dies nicht mit Windows zu funktionieren, da CMake offenbar 'OPENGL_INCLUDE_DIR' nicht auf Windows setzt. Dies scheint eine bewusste Entscheidung zu sein, basierend auf [dieser Mailinglisteneintrag vom September 2004] (https://cmake.org/pipermail/cmake/2004-September/005508.html), und es scheint, dass sich dies nicht geändert hat das dazwischenliegende Jahrzehnt. – awksp
- 1. Farbe auf dem Bildschirm reproduziert ist unterschiedlich zwischen den Plattformen
- 2. QT5 font rendering anders auf verschiedenen Plattformen
- 3. vr - Targeting auf verschiedenen Plattformen
- 4. OpenGL + Qt mit CMake
- 5. Die NCHR() - Funktion von Oracle verhält sich auf verschiedenen Plattformen unterschiedlich. Wie repariert man?
- 6. Cmake Include Verzeichnisse
- 7. Python-Druck funktioniert auf verschiedenen Servern unterschiedlich
- 8. CMake Include-Pfad
- 9. DateTime Problem auf verschiedenen Plattformen (.NET 2.0)
- 10. Serialisiert Boost.Serialization auf verschiedenen Plattformen anders?
- 11. Gibt es Entsprechungen auf verschiedenen Plattformen?
- 12. Sind alle MVC-Plattformen gleich?
- 13. CMake AUTOMOC mit Dateien auf verschiedenen Ordnern
- 14. cmake: default Include Pfad auf Unix
- 15. PHP in_array Vergleich unterschiedlich auf verschiedenen Maschinenwerk
- 16. cmake include Header nur Bibliothek
- 17. Sind diese Regex-Muster unterschiedlich?
- 18. Wo ist benutzerdefinierter temporärer Speicher auf verschiedenen Plattformen?
- 19. Geschwindigkeit des Sprites auf Leinwand unterschiedlich auf verschiedenen Bildschirmgrößen
- 20. Daten in ein Java-Programm auf verschiedenen Plattformen importieren?
- 21. scons: src und umfassen dirs
- 22. CMake konnte OpenGL in Ubuntu nicht finden
- 23. Verwendung von Numpy in verschiedenen Plattformen
- 24. Steuerelement-ID-Rendering in verschiedenen Umgebungen unterschiedlich
- 25. Word 2007 INCLUDEPICTURE verhält sich auf verschiedenen Computern unterschiedlich
- 26. Cmake: Build-Verzeichnis in Include-Pfad
- 27. E-Mail-Vorlage wird nicht korrekt auf verschiedenen Plattformen angezeigt
- 28. Warum produziert gmp_mod auf verschiedenen Plattformen unterschiedliche Ergebnisse?
- 29. alignas in Strukturen auf 32-Bit-Plattformen
- 30. cmake und eclipse: Standard-Include-Pfade?
Haben Sie versucht, den Befehl 'find_package (OpenGL)'? Ich verstehe nicht von deiner Frage, die du bereits getan hast oder nicht. – Morwenn
Natürlich tat ich es. Ohne diese wäre die OPENGL_INCLUDE_DIRECTORY-Variable leer. – lisyarus
Ok, mein Schlechter, ich war mir nicht sicher. Dann glaube ich nicht, dass es eine generische Methode gibt, die Benutzer dazu zwingt, ihre Verzeichnisse umzubenennen. Aber ich finde es seltsam: Ich habe nur das 'GL'-Verzeichnis gesehen, egal welches Betriebssystem. – Morwenn