Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake find_包和pkg_search_模块之间有什么区别_Cmake - Fatal编程技术网

Cmake find_包和pkg_search_模块之间有什么区别

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_模块有一些奇怪的用法,在这里我必须编写我想要两次的依赖项。而不是像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 all the time
使用该工具确定所请求库的位置。这在已在使用
pkg config
的系统上非常有用,因此不需要复制CMake的所有信息。请注意,这种方法存在潜在的可移植性问题,因为它需要在构建机器上正确设置
pkg config

另一方面,是CMake自己解决同样问题的机制。为此,您需要为请求的库提供一个CMake查找脚本(CMake已随附,但您可以轻松编写自己的脚本),或者由请求的库本身提供一个CMake查找脚本。在任何一种情况下,您都可能需要调整CMake以找到相应的脚本

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

  • 如果库提供,则始终首选包配置脚本
  • 使用查找脚本作为不知道CMake的库的后备方案
  • 如果您想利用与
    pkg config
    的协同作用,请使用
    pkg\u搜索\u模块。特别要注意的是,可以使用
    pkg_search_module
    作为获取所需信息的一种方法来实现查找脚本

非常感谢。您还可以回答为什么pkg_search_模块有一个前缀参数,而不只是使用库名称吗?@Arne对该模块不太了解,但请注意,前缀仅用于输出变量的名称。因此,您可以执行
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提供的信息。