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})
Is it possible to auto increment CPACK_PACKAGE_VERSION_PATCH each time target is rebuilt(not CMake is changed)? Thank you
答案 0 :(得分:1)
实际上并没有很好的方式。这里有一个小演示: https://github.com/erichschroeter/cmake-auto-increment-build-number
......但在我看来,这不值得。[/ p>
答案 1 :(得分:1)
您提供的部件代码在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。