【问题标题】:cmake which package name to pass to find_packagecmake 将哪个包名传递给 find_package
【发布时间】:2012-08-14 21:48:11
【问题描述】:

我正在尝试使用 cmake 链接 libconfig++ 库。我安装了库 使用 apt-get 所以我假设它会有一个 .cmake 文件,所以我可以使用 find_package。问题是我不知道要使用什么包名。我尝试将 libconfig、config、config++ 作为包名,但无济于事。

作为一个普遍的问题,如何找出与库相关联的包。

我知道 find_package 会查看 CMAKE_MODULE_PATH 以查看是否有 .cmake 脚本。如何找出系统上 CMAKE_MODULE_PATH 的值是什么。它不是环境变量。我正在运行 ubuntu 12.04。

感谢任何帮助。

【问题讨论】:

    标签: find cmake package


    【解决方案1】:

    要使用 find_package,您需要有相应的 Find 或 Config cmake 文件。但是图书馆可能不提供它,看来你的图书馆就是这样的情况。您可以使用 find_library 查找库和 find_path 查找包含目录。使用这些命令,您甚至可以自己编写 FindXXX.cmake。

    CMAKE_MODULE_PATH 不是环境变量,它是 CMake 的。此变量旨在供您设置,如果您有其他带有模块的目录,默认情况下它是空的。这用于“模块”模式。在这种模式下,CMake 在 CMAKE_MODULE_PATH(您的模块)或 CMake 附带的模块中搜索 FindXXX.cmake,如果找到,则用于查找库及其标头。

    如果没有找到该模块,它会切换到“配置”模式。在 Unix 上,它在以下目录中搜索 ConfigXXX.cmake:

    <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/
    <prefix>/(lib/<arch>|lib|share)/<name>*/
    <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/
    

    这个文件是随库一起提供的,所以不需要找任何东西,它们包含所有信息,库和包含的位置等。

    关于命名方案,没有标准的。你可以看看Standard CMake modules。在 Internet 上为您的名为 FindLibConfig.cmake 的库找到的模块

    对于您的情况,库没有相应的 cmake 文件,因此您应该自己编写(或找到已经编写好的)并将包含该文件的目录添加到 CMAKE_MODULE_PATH。

    我建议你阅读how find_package command workshow to write FindXXX.cmake files

    【讨论】:

    • 我知道会有一个配置 cmake 文件的库怎么样。在哪里可以找到该文件以及与库关联的包名称是什么?请看我的另外两个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2021-01-14
    • 2011-07-12
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多