CMake:opengl包含目录在不同平台上的命名不同
Cmake founds包含opengl目录,但opengl标题位于不同平台(可能还有编译器)上命名不同的子目录中:Windows上的gl、Linux上的gl、Mac上的opengl(据我所知)。因此,将OPENGL_INCLUDE_目录添加到INCLUDE路径并没有多大帮助——我仍然必须在源代码中包含(或等等)。CMake:opengl包含目录在不同平台上的命名不同,opengl,include,cmake,Opengl,Include,Cmake,Cmake founds包含opengl目录,但opengl标题位于不同平台(可能还有编译器)上命名不同的子目录中:Windows上的gl、Linux上的gl、Mac上的opengl(据我所知)。因此,将OPENGL_INCLUDE_目录添加到INCLUDE路径并没有多大帮助——我仍然必须在源代码中包含(或等等)。 我应该如何处理它?我想你的意思是OPENGL\u INCLUDE\u DIR,而不是OPENGL\u INCLUDE\u DIRECTORY 你有两个选择。最简单的方法是将${OPE
我应该如何处理它?我想你的意思是
OPENGL\u INCLUDE\u DIR
,而不是OPENGL\u INCLUDE\u DIRECTORY
你有两个选择。最简单的方法是将${OPENGL\u INCLUDE\u DIR}/GL
或${OPENGL\u INCLUDE\u DIR}/OPENGL
添加到INCLUDE搜索路径并使用
#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\u include\u DIR}
之外进一步包含路径)是找到“gl.h”的路径,然后使用以应用正确的#include
术语。您将使用包含以下内容的输入文件:
#include "@OpenglSubdir@/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)
然后运行configure_file
将用其值替换@OpenglSubdir@
,并将内容写入输出文件。然后,该输出文件将包含在目标中,并且
#include "GL/gl.h"
或
视情况而定
要实现这一点,您可以执行以下操作:
#include "@OpenglSubdir@/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)
您是否尝试了命令“查找程序包”(OpenGL)?从你的问题我不明白你是否已经这样做了。我当然知道了。如果没有这个参数,OPENGL\u INCLUDE\u目录变量将是空的。然后,我认为除了强制用户重命名他们的目录之外,没有任何通用的方法。但我觉得很奇怪:我只看到了
GL
目录,不管是什么操作系统。至少我对Windows上的“GL”和Linux上的“GL”有信心。有一个解决方案可以为CMake编写类似FindOpenGL模块的东西,但它很难看,因为它几乎可以完成这个模块实际所做的事情。非常感谢,我现在似乎有很多解决方案:)不幸的是,这似乎不适用于Windows,因为CMake显然没有在Windows上设置OPENGL\u INCLUDE\u DIR
。这似乎是一项深思熟虑的决定,其依据是,而且在这十年中,这一点似乎没有改变。