2012-08-14 88 views
1

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

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

我知道find_package查看CMAKE_MODULE_PATH来查看是否有.cmake脚本。如何在我的系统上找到CMAKE_MODULE_PATH的值。这不是一个环境变量。我运行Ubuntu 12.04。

任何帮助表示赞赏。

回答

6

要使用find_package,您需要具有相应的Find或Config cmake文件。但图书馆可能不提供它,似乎与你的图书馆是这样的情况。您可以使用find_library查找库,find_path查找include目录。有了这些命令,你甚至可以自己编写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。为您的库找到名为FindLibConfig.cmake的模块的模块

对于您的情况,库没有相应的cmake文件,因此您应该将它写入自己(或查找已写入),并将该文件添加到CMAKE_MODULE_PATH。

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

+0

我认识的库有一个配置cmake文件。该文件将在哪里找到,以及与库相关的软件包名称是什么?请看我的其他两个问题。 – Mustafa 2012-08-16 18:51:04

+0

@Mustafa:更新后的帖子更多信息 – 2012-08-16 21:29:27