Frage CMake: opengl include dirs werden auf verschiedenen Plattformen unterschiedlich benannt


Cmake founds enthält ein Verzeichnis für opengl, aber opengl-Header sind in einem Unterverzeichnis, das auf verschiedenen Plattformen (und vielleicht auch Compilern) anders benannt ist: 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?


5
2018-04-24 13:03


Ursprung


Antworten:


Ich nehme an, du meinst es OPENGL_INCLUDE_DIRnicht OPENGL_INCLUDE_DIRECTORY.

Sie haben hier eine Auswahl. Das einfachste ist hinzuzufügen ${OPENGL_INCLUDE_DIR}/GL oder ${OPENGL_INCLUDE_DIR}/OpenGL zu Ihren Suchpfaden hinzufügen und verwenden

#include "gl.h"

in deinem Quellcode.

Der Fall von Dateinamen wird unter Windows ignoriert, sodass Sie ihn nicht verwenden müssen /gl  und  /GL - einfach /GL Wird besorgt.

Um dies zu erreichen, führen Sie in Ihrer CMakeLists.txt Folgendes aus:

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


Um dies etwas robuster zu machen, können Sie CMake den Pfad zu "gl.h" suchen lassen und folgendes einbeziehen:

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

In Ihrer Quelle würden Sie wiederum Folgendes verwenden:

#include "gl.h"


Möglicherweise die robustesten (d. H. Die Vermeidung weiterer Pfade jenseits ${OPENGL_INCLUDE_DIR}) wäre, den Pfad zu "gl.h" zu finden und dann zu verwenden configure_file das richtige anwenden #include Begriff. Sie würden eine Eingabedatei verwenden, die Folgendes enthält:

#include "@OpenglSubdir@/gl.h"

und dann rennen configure_file würde ersetzen @OpenglSubdir@ mit seinem Wert und schreibe den Inhalt in eine Ausgabedatei. Diese Ausgabedatei wäre dann in Ihrem Ziel enthalten und hätte

#include "GL/gl.h"

oder

#include "OpenGL/gl.h"

wie angemessen.

Um dies zu erreichen, würden Sie Folgendes 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)

6
2018-04-24 22:17