gpt4 book ai didi

cmake - CMakeLists.txt中应该在哪里调用find_package?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:55 25 4
gpt4 key购买 nike

在 cmake 项目中包含外部库通常使用 find_package() 执行。

但是在一个大型的多应用程序/多库项目中,一些第 3 方和/或系统库被多个应用程序和库使用是很典型的。

这些常用库的find_package()应该在哪里调用?

  1. 在每个需要它们的可执行文件/库的 CMakeLists.txt 文件中?
  2. 或者,在顶级 CMakeLists.txt 文件中?

第一个选项似乎是一种更加模块化的方法,但相关的 find_package() 脚本是为使用它们的每个库/可执行文件执行的。这会减慢配置步骤。

第二个选项更有效,但对我来说看起来有点像全局变量。

最佳答案

我会区分可能是独立包(或已经是)的子项目/目录和专门反射(reflect)源代码结构的子项目/目录。

  • 在第一种情况下,find_package 显然应该位于子目录 CMakeLists.txt 中,以便为独立构建或分发提取子目录。配置步骤的低效在这里不应该是一个问题,因为构建的配置并不经常执行。

  • 在第二种情况下,我更喜欢在顶层 CMakeLists.txt 中调用 find_package。如果您不使用这些调用设置的变量来填充全局变量,而是使用 target_link_libraries(如评论中所建议的),这应该足够干净了。但有时,找到的包不会导出正确的目标来链接,而是定义一些包含路径变量等。然后,应该很容易定义您自己的 INTERFACE 库,将这些标志/路径封装为使用要求,并在再次通过 target_link_libraries 链接时传递它们。

关于cmake - CMakeLists.txt中应该在哪里调用find_package?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com