我在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,这样做的方式?
答案 0 :(得分:2)
您关于CPACK_PACKAGE_VERSION_XXX设置方式的声明不正确。如果project
命令指定版本控制,则由project
命令设置相关的CPack变量。因此,当您创建1.2.9分支时,需要在项目命令中将1.2.9设置为版本号。
CPACK_PACKAGE_VERSION_MAJOR
软件包的主要版本。该变量将始终被设置,但是其默认值取决于是否提供了版本详细信息 顶层CMakeLists.txt文件中的project()命令。如果版本 给出了详细信息,默认值为 CMAKE_PROJECT_VERSION_MAJOR。如果未提供版本详细信息,则 默认版本为0.1.1,导致 CPACK_PACKAGE_VERSION_MAJOR的默认值为0。
> 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