Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:opengl包含目录在不同平台上的命名不同_Opengl_Include_Cmake - Fatal编程技术网

CMake:opengl包含目录在不同平台上的命名不同

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

Cmake founds包含opengl目录,但opengl标题位于不同平台(可能还有编译器)上命名不同的子目录中:Windows上的gl、Linux上的gl、Mac上的opengl(据我所知)。因此,将OPENGL_INCLUDE_目录添加到INCLUDE路径并没有多大帮助——我仍然必须在源代码中包含(或等等)。
我应该如何处理它?

我想你的意思是
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
。这似乎是一项深思熟虑的决定,其依据是,而且在这十年中,这一点似乎没有改变。