CMake:opengl包括dirs在不同平台上的命名方式不同

时间:2013-04-24 13:03:52

标签: opengl include cmake

Cmake发现包含opengl的目录,但是opengl头文件位于不同平台(也许是编译器)上的不同命名的子目录中:Windows上的gl,Linux上的GL,Mac上的OpenGL(据我所知) 。因此,添加OPENGL_INCLUDE_DIRECTORY以包含路径并没有多大帮助 - 我仍然必须在我的源中包含(或等等)。 我应该如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:6)

我认为您的意思是OPENGL_INCLUDE_DIR,而不是OPENGL_INCLUDE_DIRECTORY

这里有几个选择。最简单的方法是将${OPENGL_INCLUDE_DIR}/GL${OPENGL_INCLUDE_DIR}/OpenGL添加到您的包含搜索路径并使用

#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_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)