Совместное управление версиями с помощью cmake на github - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть довольно новый проект на github, который производит общую библиотеку.В дальнейшем я хотел бы использовать семантическое управление версиями (как описано в semver.org ) для номеров основных / вспомогательных / разделяемых библиотек в имени файла.В проекте используется CMake.Файл CMakeLists.txt ссылается на CPACK_PACKAGE_VERSION_MAJOR, CPACK_PACKAGE_VERSION_MINOR и CPACK_PACKAGE_VERSION_PATCH и устанавливает для них значения по умолчанию, если они не передаются в командной строке.

Мой план состоит в том, чтобы переходить на изменения ABI и добавления API в соответствии с дополнениями 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 голосов
/ 30 ноября 2018

Ваше утверждение о том, как установлен CPACK_PACKAGE_VERSION_XXX, неверно.Рассматриваемые переменные CPack устанавливаются командой project, если в команде project указано управление версиями.Поэтому, когда вы создаете ветку 1.2.9, вы устанавливаете 1.2.9 в качестве номера версии в команде проекта.

Из Справка CPack

CPACK_PACKAGE_VERSION_MAJOR

Пакет основной версии.Эта переменная всегда будет установлена, но ее значение по умолчанию зависит от того, были ли предоставлены подробные сведения о версии команде project () в файле CMakeLists.txt верхнего уровня.Если указана информация о версии, значением по умолчанию будет 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>...])

Если вы не хотите устанавливать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...