1

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

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

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

任何帮助表示赞赏。

4

1 回答 1

7

要使用 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)/

该文件随库一起提供,因此无需查找任何内容,它们包含所有信息,库和包含所在的位置等。

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

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

我建议您阅读find_package 命令的工作原理以及如何编写 FindXXX.cmake 文件

于 2012-08-15T07:42:31.577 回答