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