2016-03-02 97 views
2
set(CPACK_PACKAGE_VERSION_MAJOR "1") 
set(CPACK_PACKAGE_VERSION_MINOR "0") 
set(CPACK_PACKAGE_VERSION_PATCH "0") 
set(LIB_VERSION_STRING ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) 
... 
set_target_properties(${PROGRAM_NAME} PROPERTIES VERSION ${LIB_VERSION_STRING}) 

是否有可能自動遞增CPACK_PACKAGE_VERSION_PATCH每次目標重建(而不是CMake更改)? 謝謝CMake目標版本增量

回答

0

您提供的零件代碼在CMake時運行(可能來自CMakeLists.txt)。您不可能在Cmake時間處理遞增的值,但您可以做的是在構建時運行一些cmake腳本,並以不同的方式(例如通過標題)將遞增的值傳遞給源代碼。

運行cmake的腳本編譯之前(進入你的CMakeLists.txt):

add_custom_command(
    TARGET your_project 
    PRE_BUILD 
    COMMAND ${CMAKE_COMMAND} 
     -P "your_cmake_script.cmake" 
) 

你需要把你想在編譯時運行的代碼放到不同的文件,並告訴CMake的要在編譯過程之前的文件...

your_cmake_script.cmake例如:

#basic definitions 
set(HEADER_FILE "increment.h") 
set(CACHE_FILE "BuildNumberCache.txt") 

#Reading data from file + incrementation 
IF(EXISTS ${CACHE_FILE}) 
    file(READ ${CACHE_FILE} INCREMENTED_VALUE) 
    math(EXPR INCREMENTED_VALUE "${INCREMENTED_VALUE}+1") 
ELSE() 
    set(INCREMENTED_VALUE "1") 
ENDIF() 

#Update the cache 
file(WRITE ${CACHE_FILE} "${INCREMENTED_VALUE}") 

#Create the header 
file(WRITE ${HEADER_FILE} "#ifndef INCREMENT_H\n#define INCREMENT_H\n\n#define INCREMENTED_VALUE ${INCREMENTED_VALUE}\n\n#endif") 

不要忘記increment.h添加到您的項目!

如果您正在查找更詳細的示例,請檢查此github repo