Почему бы не извлечь информацию о сборке из VCS во время cmake-time?Затем вы можете легко изменить CPACK_PACKAGE_FILE_NAME, указав свой номер версии.
Дополнительный бонус: когда вы делаете это во время CMake, вы можете, например, заполнить файл «Readme.txt» информацией git, используя CMake's configure_file и добавьте его в свой пакет.Или, возможно, используйте его для заполнения "config.h", который используется в ваших сборках.
Пример: в одном из моих собственных проектов, у меня есть небольшой кусок кода CMake, которыйнаходит Git и извлекает текущий хэш набора изменений из репозитория исходного кода.Возможно, это не лучший способ извлечения информации из Git, но он работает для меня ...
# First try to find the git-executable
find_program( Git_EXECUTABLE NAMES git git.cmd PATHS
${Git_DIR}
ENV PATHS
$ENV{Git_DIR}
)
# Run "git log -n 1 --pretty="%h" for the current commit-hash
execute_process( COMMAND ${Git_EXECUTABLE} "log" "-n" "1" "--pretty=\"%h\""
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE Git_Commit_Hash
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# and use a regex to strip quotes.
string( REGEX REPLACE "^\"(.*)\"$" "\\1" Git_Commit_Hash ${Git_Commit_Hash} )
Результатом будет переменная Git_Commit_Hash
со значением хеша из 7 символов, которое используетсяпри настройке CPack:
set( CPACK_PACKAGE_NAME "MyProject" )
message( STATUS " CPack options: " ${CPACK_PACKAGE_NAME} )
message( STATUS " Preparing CPACK: " )
message( STATUS " and hash: ${Git_Commit_Hash}" )
set( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${Git_Build_Version}_${CPACK_PACKAGE_VERSION}" )