当使用CMakeLists编译OpenGL项目时,我有以下行链接过剩和gl:
target_link_libraries(my_exe ${OPENGL_gl_LIBRARY} ${GLUT_LIBRARIES})
我查了如何用CMake链接过剩和gl,所以我看到我可以使用$ {OPENGL_gl_LIBRARY}和$ {GLUT_LIBRARIES}。但是我怎么知道要使用的变量呢?我习惯只做$ {THELIBRARY_LIBRARES},但在gl的情况下,它改为将“ gl ”添加到变量名中。如果没有谷歌搜索它(我想使用的任何库),我怎么知道呢?
答案 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。
在编写查找模块下,您会看到模块中已设置变量。检查CMake-Modules目录中的FindOpenGL.cmake
模块时,您将看到变量的名称。