2013-04-24 9 views
5

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

+0

Haben Sie versucht, den Befehl 'find_package (OpenGL)'? Ich verstehe nicht von deiner Frage, die du bereits getan hast oder nicht. – Morwenn

+0

Natürlich tat ich es. Ohne diese wäre die OPENGL_INCLUDE_DIRECTORY-Variable leer. – lisyarus

+0

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

Antwort

6

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/glund 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) 
+0

Vielen Dank, es scheint, dass ich jetzt viele Lösungen habe :) – lisyarus

+2

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

Verwandte Themen