为什么不在cmake-time从VCS提取构建信息?然后,您可以轻松修改CPACK_PACKAGE_FILE_NAME以包含您的版本号。
新增奖金:在CMake时间进行此操作时,您可以使用CMake的configure_file用git-info填充“Readme.txt”文件并将其添加到您的包中。或者可以用它来填充一个“config.h”,它在你的版本中使用。
实施例:在自己的项目之一 ,我有一个小片的指找到GIT中并提取从源代码库中的当前变更散列CMake的代码。它可能不是提取信息的最佳方式的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}")
您可以更进一步,从CMakeFile.txt生成'CPackOptions.cmake.in'和'create-cpackoptions.cmake'。这意味着你不需要源代码树中的两个文件。例如:'file(WRITE $ {CMAKE_BINARY_DIR} /CPackOptions.cmake.in“set(CPACK_PACKAGE_FILE_NAME \”@proj_name @ - \ $ {CPACK_PACKAGE_VERSION} r @ revision @ - \ $ {CPACK_SYSTEM_NAME} \“)”)' – 2015-09-23 16:26:05