Cmake 为 opengl 创建了 include 目录,但 opengl 头文件位于一个子目录中,该子目录在不同平台(可能还有编译器)上的名称不同:Windows 上的 gl,Linux 上的 GL,Mac 上的 OpenGL(据我所知)。因此,将 OPENGL_INCLUDE_DIRECTORY 添加到包含路径并没有太大帮助 - 我仍然必须在我的源代码中包含(或,等等)。我应该如何处理?
问问题
4905 次
1 回答
6
我假设你的意思是OPENGL_INCLUDE_DIR
,不是OPENGL_INCLUDE_DIRECTORY
。
你在这里有几个选择。最简单的方法是添加${OPENGL_INCLUDE_DIR}/GL
或添加${OPENGL_INCLUDE_DIR}/OpenGL
到您的包含搜索路径并使用
#include "gl.h"
在您的源代码中。
文件名的大小写在 Windows 上被忽略,所以你不需要使用/gl
and /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)
于 2013-04-24T22:17:58.467 回答