Cmake find_包和pkg_search_模块之间有什么区别
关于这些命令,我现在只能说pkg_search_模块有一些奇怪的用法,在这里我必须编写我想要两次的依赖项。而不是像find_包中那样只做一次Cmake find_包和pkg_search_模块之间有什么区别,cmake,Cmake,关于这些命令,我现在只能说pkg_search_模块有一些奇怪的用法,在这里我必须编写我想要两次的依赖项。而不是像find_包中那样只做一次 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
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
使用该工具确定所请求库的位置。这在已在使用pkg config
的系统上非常有用,因此不需要复制CMake的所有信息。请注意,这种方法存在潜在的可移植性问题,因为它需要在构建机器上正确设置pkg config
另一方面,是CMake自己解决同样问题的机制。为此,您需要为请求的库提供一个CMake查找脚本(CMake已随附,但您可以轻松编写自己的脚本),或者由请求的库本身提供一个CMake查找脚本。在任何一种情况下,您都可能需要调整CMake以找到相应的脚本
选择使用哪一个非常简单:
- 如果库提供,则始终首选包配置脚本
- 使用查找脚本作为不知道CMake的库的后备方案
- 如果您想利用与
的协同作用,请使用pkg config
pkg\u搜索\u模块。特别要注意的是,可以使用
作为获取所需信息的一种方法来实现查找脚本pkg_search_module
pkg\u搜索模块(compress\u lib REQUIRED zlib)
,然后执行if(compress\u lib\u FOUND).
。所以库名(在必需的之后的那一个)是由库决定的,但是你可以自由选择你想要的前缀。我看到pkg\u搜索模块查找SDL2\u图像,而查找包没有。有没有find_package
成功的例子,而pkg_search_module
失败的例子?@user2023370正如答案所提到的,两者是完全独立的,因此即使另一个成功,其中一个失败也不罕见。考虑使用你找到的脚本来适应它的用法,它使用了<代码> PKG CONFIG提供的信息。