在github上与cmake共享库版本控制

时间:2018-11-30 05:18:59

标签: linux github cmake shared-libraries semantic-versioning

我在github上有一个相当新的项目,它产生一个共享库。展望未来,我想对文件名中的共享库主/次/补丁号使用语义版本控制(如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,这样做的方式?

1 个答案:

答案 0 :(得分:2)

您关于CPACK_PACKAGE_VERSION_XXX设置方式的声明不正确。如果project命令指定版本控制,则由project命令设置相关的CPack变量。因此,当您创建1.2.9分支时,需要在项目命令中将1.2.9设置为版本号。

来自CPack Help

  

CPACK_PACKAGE_VERSION_MAJOR

     

软件包的主要版本。该变量将始终被设置,但是其默认值取决于是否提供了版本详细信息   顶层CMakeLists.txt文件中的project()命令。如果版本   给出了详细信息,默认值为   CMAKE_PROJECT_VERSION_MAJOR。如果未提供版本详细信息,则   默认版本为0.1.1,导致   CPACK_PACKAGE_VERSION_MAJOR的默认值为0。

Project command

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

如果您不想通过project命令设置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