CMake 目标版本增量

Ale*_*lex 4 cmake

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})
Run Code Online (Sandbox Code Playgroud)

是否可以在每次重建目标时自动增加 CPACK_PACKAGE_VERSION_PATCH(不更改 CMake)?谢谢

小智 5

您提供的部分代码在 CMake 时间运行(可能来自 CMakeLists.txt)。您不可能在 Cmake 时间处理递增的值,但您可以做的是在构建时运行一些 cmake 脚本,并以不同的方式(例如通过标头)将递增的值传递给您的源代码。

在编译之前运行 cmake 脚本(进入你的 CMakeLists.txt):

add_custom_command(
    TARGET your_project
    PRE_BUILD
    COMMAND ${CMAKE_COMMAND}
        -P "your_cmake_script.cmake"
)
Run Code Online (Sandbox Code Playgroud)

您需要将要在编译时运行的代码放入不同的文件中,并告诉 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")
Run Code Online (Sandbox Code Playgroud)

不要忘记将 increment.h 添加到您的项目中!

如果您正在寻找更详细的示例,请查看此github repo


Chr*_*ing 1

确实没有一个很好的方法来做到这一点。这里有一个小演示: https ://github.com/erichschroeter/cmake-auto-increment-build-number

...但在我看来,这不值得。