gpt4 book ai didi

linux - 在 github 上使用 cmake 进行共享库版本控制

转载 作者:太空狗 更新时间:2023-10-29 12:09:12 30 4
gpt4 key购买 nike

我在 github 上有一个相当新的项目,它生成一个共享库。展望 future ,我想对文件名中的共享库主要/次要/补丁号使用语义版本控制(如 semver.org 中所述)。该项目使用CMake。 CMakeLists.txt 文件引用 CPACK_PACKAGE_VERSION_MAJOR、CPACK_PACKAGE_VERSION_MINOR 和 CPACK_PACKAGE_VERSION_PATCH,如果它们未在命令行中传递,则将它们设置为默认值。

我的计划是根据语义版本控制原则对 ABI 更改和 API 添加进行分支。

我知道 github 支持基于 git 标签创建和命名包含项目源的发布包。但是当 github 用户在他们的机器上构建一个版本时,我没有看到将主要、次要和补丁号传播到共享库名称的方法。

例如,如果我有一个名为 myproj_1_2 的分支和一个名为 myproj_rel_1_2_9 的发布标签,是否有办法让用户构建的共享库名为 libmyproj.so.1.2.9?

这只是记录用户应该在 cmake 命令行上传递构建名称信息,并让 CMakeLists.txt 文件解析它并相应地设置 CPACK_PACKAGE_VERSION_MAJOR、CPACK_PACKAGE_VERSION_MINOR 和 CPACK_PACKAGE_VERSION_PATCH,还是有更优雅的方法如何做到这一点?

最佳答案

您关于如何设置 CPACK_PACKAGE_VERSION_XXX 的陈述是不正确的。如果 project 命令指定了版本控制,则有问题的 CPack 变量由 project 命令设置。因此,当您创建 1.2.9 分支时,您将在项目命令中将 1.2.9 设置为版本号。

来自 CPack Help

CPACK_PACKAGE_VERSION_MAJOR

Package major version. This variable will always be set, but its default value depends on whether or not version details were given to the project() command in the top level CMakeLists.txt file. If version details were given, the default value will be CMAKE_PROJECT_VERSION_MAJOR. If no version details were given, a default version of 0.1.1 will be assumed, leading to CPACK_PACKAGE_VERSION_MAJOR having a default value of 0.

Project command

> project(<PROJECT-NAME>
> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
> [DESCRIPTION <project-description-string>]
> [HOMEPAGE_URL <url-string>]
> [LANGUAGES <language-name>...])

如果您不想通过项目命令设置 VERSION,那么还有多种其他方法可以设置相关变量。

示例位于: https://cmake.org/cmake-tutorial/

另请参阅 CMake 如何处理版本:

https://gitlab.kitware.com/cmake/cmake/blob/master/Source/CMakeVersionSource.cmake

https://gitlab.kitware.com/cmake/cmake/blob/master/Source/cmVersionConfig.h.in

另一个如何获取设置版本相关信息的git元数据的例子: https://github.com/pmirshad/cmake-with-git-metadata/blob/master/CMakeLists.txt

关于linux - 在 github 上使用 cmake 进行共享库版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551648/

30 4 0
文章推荐: html - 合并 HTML 表格中的单元格
文章推荐: Sublime Text 2 中的 HTML 键盘快捷键?
文章推荐: javascript - html 标签中的angularjs表达式