cmake将包名称传递给find_package

Mus*_*afa 1 cmake find package

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

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

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

任何帮助表示赞赏.

Nik*_*nko 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)/
Run Code Online (Sandbox Code Playgroud)

这个文件随库一起提供,因此不需要查找任何内容,它们包含所有信息,库和包含的位置等.

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

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

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

  • 我知道有一个配置 cmake 文件的库怎么样?在哪里可以找到该文件以及与该库关联的包名称是什么?请看我的另外两个问题。 (2认同)