如何知道CMakeLists的库变量名?

时间:2017-03-11 22:40:04

标签: c++ opengl cmake

当使用CMakeLists编译OpenGL项目时,我有以下行链接过剩和gl:

target_link_libraries(my_exe ${OPENGL_gl_LIBRARY} ${GLUT_LIBRARIES})

我查了如何用CMake链接过剩和gl,所以我看到我可以使用$ {OPENGL_gl_LIBRARY}和$ {GLUT_LIBRARIES}。但是我怎么知道要使用的变量呢?我习惯只做$ {THELIBRARY_LIBRARES},但在gl的情况下,它改为将“ gl ”添加到变量名中。如果没有谷歌搜索它(我想使用的任何库),我怎么知道呢?

3 个答案:

答案 0 :(得分:3)

除了查阅find模块的文档外,您还可以使用CMake的VARIABLES属性为您提供find_package()调用定义的变量。

以下代码为例:

cmake_minimum_required(VERSION 3.2)

project(FindPackageVars)

get_directory_property(_vars_before VARIABLES)
find_package(OpenGL)
get_directory_property(_vars VARIABLES)

list(REMOVE_ITEM _vars _vars_before ${_vars_before})
foreach(_var IN LISTS _vars)
    message(STATUS "${_var} = ${${_var}}")
endforeach()

我机器上的输出:

-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so
-- FIND_PACKAGE_MESSAGE_DETAILS_OpenGL = [/usr/lib/x86_64-linux-gnu/libGL.so][/usr/include][v()]
-- OPENGL_FOUND = TRUE
-- OPENGL_GLU_FOUND = YES
-- OPENGL_INCLUDE_DIR = /usr/include
-- OPENGL_INCLUDE_PATH = /usr/include
-- OPENGL_LIBRARIES = /usr/lib/x86_64-linux-gnu/libGLU.so;/usr/lib/x86_64-linux-gnu/libGL.so
-- OPENGL_LIBRARY = /usr/lib/x86_64-linux-gnu/libGLU.so;/usr/lib/x86_64-linux-gnu/libGL.so
-- OPENGL_XMESA_FOUND = NO
-- OPENGL_gl_LIBRARY = /usr/lib/x86_64-linux-gnu/libGL.so
-- OPENGL_glu_LIBRARY = /usr/lib/x86_64-linux-gnu/libGLU.so
-- OPENGL_xmesa_INCLUDE_DIR = OPENGL_xmesa_INCLUDE_DIR-NOTFOUND

答案 1 :(得分:2)

这些变量是通过find_package(XXX)次调用获得的。

此类调用将从库中重定向到FindXXX.cmake脚本(随CMake一起提供或包含在使用它的项目中)或XXXConfig.cmake脚本(随库本身提供)。

因此,要确定有意义的变量名称,您需要查阅适当的脚本。通常,脚本的界面(输入 - 输出变量)在脚本开头的注释中描述为

CMake附带的FindXXX.cmake脚本的文档可以在CMake documentation pages about modules中阅读。

答案 2 :(得分:1)

你不是。它取决于库的find-module。

See here.

编写查找模块下,您会看到模块中已设置变量。检查CMake-Modules目录中的FindOpenGL.cmake模块时,您将看到变量的名称。