find_package和pkg_search_module有什么区别

时间:2014-09-21 14:00:39

标签: cmake

现在我只能说这些命令是pkg_search_module有一些奇怪的用法,我必须编写两次我想要的依赖项。而不是像find_package中那样只有一次

pkg_search_module(ZLIB REQUIRED zlib)
#seriously two times zlib and once in only capital case‽
find_package(ZLIB)
#much cleaner but for some odd reason find_package does not work all the time

1 个答案:

答案 0 :(得分:17)

pkg_search_module使用pkg-config工具确定所请求库的位置。这在已经使用pkg-config的系统上非常有用,因此您无需复制CMake的所有信息。请注意,此方法存在潜在的可移植性问题,因为它需要在构建计算机上正确设置pkg-config

另一方面,

find_package是CMake自己解决同一问题的机制。为此,您需要为所请求的库(CMake已附带a couple of those,但您可以轻松编写自己的库)或所请求的库本身提供的package config script的CMake查找脚本。在任何一种情况下,您可能需要调整CMAKE_MODULE_PATH以便CMake能够找到相应的脚本。

选择使用哪一个非常简单:

  • 如果由库提供,则始终更喜欢包配置脚本。
  • 使用查找脚本作为不了解CMake的库的后备。
  • 如果您想利用pkg_search_module的协同效应,请使用pkg-config。特别要注意的是,可以使用pkg_search_module作为获取所需信息的一种方法来实现查找脚本。