Cmake发现包含opengl的目录,但是opengl头文件位于不同平台(也许是编译器)上的不同命名的子目录中:Windows上的gl,Linux上的GL,Mac上的OpenGL(据我所知) 。因此,添加OPENGL_INCLUDE_DIRECTORY以包含路径并没有多大帮助 - 我仍然必须在我的源中包含(或等等)。 我应该如何处理它?</ p>
答案 0 :(得分:6)
我认为您的意思是OPENGL_INCLUDE_DIR
,而不是OPENGL_INCLUDE_DIRECTORY
。
这里有几个选择。最简单的方法是将${OPENGL_INCLUDE_DIR}/GL
或${OPENGL_INCLUDE_DIR}/OpenGL
添加到您的包含搜索路径并使用
#include "gl.h"
在你的源代码中。
在Windows上忽略了文件名的情况,因此您无需使用/gl
和 /GL
- 只需/GL
即可。
要实现这一点,请在您的CMakeLists.txt中执行:
if(APPLE)
include_directories(${OPENGL_INCLUDE_DIR}/OpenGL)
else()
include_directories(${OPENGL_INCLUDE_DIR}/GL)
endif()
为了使这一点更加健壮,你可以让CMake找到“gl.h”的路径并包括:
find_path(OpenglIncludeSubdir
NAMES gl.h
PATHS ${OPENGL_INCLUDE_DIR}
PATH_SUFFIXES GL OpenGL
NO_DEFAULT_PATH)
include_directories(${OpenglIncludeSubdir})
同样,在您的来源中,您将使用:
#include "gl.h"
可能最强大(即避免进一步包括超出${OPENGL_INCLUDE_DIR}
的路径)将找到“gl.h”的路径,然后使用configure_file
来应用正确的#include
项。您将使用包含以下内容的输入文件:
#include "@OpenglSubdir@/gl.h"
然后运行configure_file
会将@OpenglSubdir@
替换为其值,并将内容写入输出文件。然后,此输出文件将包含在您的目标中,并具有
#include "GL/gl.h"
或
#include "OpenGL/gl.h"
酌情。
要实现这一目标,您需要执行以下操作:
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)