gpt4 book ai didi

cmake - 为什么 foo-config.cmake 和 foo-config-version.cmake 应该分开?

转载 作者:行者123 更新时间:2023-12-05 07:14:42 29 4
gpt4 key购买 nike

在 Daniel Pfeiffer ( Effective CMake ) 和 Deniz Bahadir ( More Modern CMake ) 的演讲中,甚至在 CMake documentation 中,建议(至少)生成 .cmake 文件,以便在其他项目中使用带有 CMake 的存储库:foo-config.cmakefoo- config-version.cmake(用于包 foo;另一种可能的命名方案是 FooConfig.cmakeFooConfigVersion.cmake)。

这对我来说已经很奇怪了。为什么 foo-config.cmake 不应该也有关于安装版本的信息/命令?这两个独立文件的存在是否存在某些客观原因,或者它只是 CMake 设计的“失误”?

编辑:删掉了这个问题的其余部分,为了集中注意力,因为我弄错了。

最佳答案

Why shouldn't foo-config.cmake also have information/commands regarding the installed version?

包脚本 foo-config.cmake 可以自由创建目标(不能删除)、在父作用域中设置变量等。将 foo-config-version.cmake 拆分为一个在隔离范围内运行的脚本,可以轻松地进行包搜索,而不必担心破坏变量。将所有这些功能合并到一个文件中是可能的(查找模块的方式),但历史表明这种做法容易出错且多余。 p>

基本上,有两个优点:

  1. 隔离。运行版本脚本不会破坏 find_package 调用程序中的变量。 foo-config.cmake 运行后,它可以设置包变量、创建目标等,并完全相信用户有意执行此操作。
  2. 减少样板文件。 CMakePackageConfigHelpers 可以在 CMakeLists.txt 文件中以两行为代价生成良好的版本脚本。鉴于 CMake 3.19 中的新版本范围功能,这是一项受欢迎的自动化任务。

关于cmake - 为什么 foo-config.cmake 和 foo-config-version.cmake 应该分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59790040/

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