包与库的区别

71
我刚刚开始使用 CMake,发现它们既有 find_package 又有 find_library。这让我感到困惑。请问大家能解释一下在编程世界或者是 CMake 中,包和库的区别吗?
谢谢!
1个回答

57

假设你想在项目中使用zlib,需要找到头文件zlib.h和库文件libz.so(在Linux上)。您可以使用低级别的cmake命令find_pathfind_library来查找它们,或者您可以使用find_package(ZLIB)。后一个命令将尝试找到使用zlib所需的所有内容。这可能是额外的宏定义或依赖项。

更新,有关find_package的更多详细信息:当调用CMake命令find_package(SomeThing)时,如文档中所述,cmake可以以两种可能的模式运行:

  • 模块模式(搜索名为FindSomeThing.cmake的文件)
  • 配置模式(搜索名为SomeThingConfig.cmake的文件)

对于ZLIB,有一个名为FindZLIB的模块,随CMake本身一起提供(在我的Linux机器上,该文件位于/usr/share/cmake/Modules/FindZLIB.cmake)。该模块是一个CMake脚本,使用CMake API在默认位置搜索ZLIB文件,或者如果无法自动找到,则询问用户位置。


8
ZLIB是如何定义的呢?谁编写了查找ZLIB所需命令的必要性的命令? - ShrimpCrackers
@ShrimpCrackers:我已经修改了我的答案。 - lrineau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接