5

Cmake 为 opengl 创建了 include 目录,但 opengl 头文件位于一个子目录中,该子目录在不同平台(可能还有编译器)上的名称不同:Windows 上的 gl,Linux 上的 GL,Mac 上的 OpenGL(据我所知)。因此,将 OPENGL_INCLUDE_DIRECTORY 添加到包含路径并没有太大帮助 - 我仍然必须在我的源代码中包含(或,等等)。我应该如何处理?

4

1 回答 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 回答