【问题标题】:How to know library variable names for CMakeLists?如何知道 CMakeLists 的库变量名称?
【发布时间】:2017-03-11 22:40:03
【问题描述】:

在使用 CMakeLists 编译 OpenGL 项目时,我有以下行来链接 glut 和 gl:

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

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

【问题讨论】:

    标签: c++ opengl cmake


    【解决方案1】:

    除了查阅 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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 谢谢! (接受这个是因为它是第一个......)CMake 附带的 FindXXX.cmake 在哪里?
      【解决方案3】:

      你没有。它依赖于库的查找模块。

      See here.

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

      【讨论】:

      • CMake-Modules 目录在哪里? (Ubuntu 16.04) 我在 /usr/lib/cmake 下找不到它。
      • @Sterling 根据文章,它位于 /usr/share/cmake/Modules 下。我正在使用 CLion,对于我的安装,它位于 CLion 目录中,也许您的也与 IDE 捆绑在一起(如果您使用的是一个)。
      • 啊,好吧,是的,我在 /usr/share/cmake-2.8/Modules 中找到了我的。谢谢!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多