cmake将包名称传递给find_package

时间:2012-08-14 21:48:11

标签: find cmake package

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

作为一般性问题,如何找出与库相关联的包。

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

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

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

如果找不到该模块,则会切换到“Config”模式。在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