ein*_*ica 5 packaging cmake software-packaging buildconfiguration
在 Daniel Pfeiffer ( Effective CMake ) 和 Deniz Bahadir ( More Modern CMake ) 的演讲中,甚至在CMake 文档中,建议(至少).cmake生成文件以便在其他项目中使用 CMake 的存储库:foo-config.cmake和foo-config-version.cmake(对于包foo;另一种可能的命名方案是FooConfig.cmake和FooConfigVersion.cmake)。
这对我来说已经很奇怪了。为什么不应该foo-config.cmake有有关已安装版本的信息/命令?这两个独立文件的存在是否有某种客观原因,或者只是 CMake 设计的“失误”?
编辑:为了集中注意力,剪掉了这个问题的其余部分,因为我弄错了。
为什么 foo-config.cmake 不应该包含有关已安装版本的信息/命令?
包脚本foo-config.cmake可以自由创建目标(无法删除)、在父作用域中设置变量等。拆分foo-config-version.cmake为在隔离范围内运行的脚本可以轻松地进行包搜索,而不必担心破坏变量。本来可以将所有这些功能合并到一个文件中(就像 find模块那样),但历史表明这种做法容易出错且多余。
基本上有两个优点:
find_package调用者中的变量。一旦foo-config.cmake运行,它可以设置包变量、创建目标等,并且完全确信用户有意执行此操作。CMakePackageConfigHelpers以文件中的两行为代价生成良好的版本脚本CMakeLists.txt。鉴于 CMake 3.19 中的新版本范围功能,这是一项受欢迎的自动化任务。| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |