macro(gen_version_info) if(NOT CMAKE_CURRENT_BINARY_DIR) message(FATAL_ERROR "Need printf for version embedding") endif() if(NOT${CMAKE_CURRENT_BINARY_DIR}/version_info.bin) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version_info.bin "BuildVersion: ${APP_VERSION}") message(STATUS "Generate version info file: ${CMAKE_CURRENT_BINARY_DIR}/version_info.bin") endif() endmacro()
macro(add_version_info target) if(NOT OBJCOPY_EXECUTABLE) message(FATAL_ERROR "Need objcopy for version embedding") endif() add_custom_command(TARGET${target} POST_BUILD COMMAND${OBJCOPY_EXECUTABLE} --add-section .version_info=${CMAKE_CURRENT_BINARY_DIR}/version_info.bin $<TARGET_FILE:${target}> ) message(STATUS "Embedding version info for ${target}") endmacro()
检查
$ readelf -p .version_info ./build/main
String dump of section '.version_info': [ 0] BuildVersion: 1.3.1.1