爲什麼不在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