为什么不在 cmake 时从 VCS 中提取构建信息?然后您可以轻松地修改 CPACK_PACKAGE_FILE_NAME 以包含您的版本号。
额外的好处:在 CMake 时执行此操作时,您可以使用 CMake 的configure_file使用 git-info 填充“Readme.txt”文件并将其添加到您的包中。或者也许用它来填充你的构建中使用的“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}" )