【开发笔记】CMake工程通过读取文件设置版本号

这种方法可以让版本管理变得非常灵活,不需要每次都改动CMakeLists.txt文件

在cmake项目根目录新建一个version_config文件(叫啥名都行),写入版本号信息

# version
PROJECT_VERSION_MAJOR=1
PROJECT_VERSION_MINOR=0
PROJECT_VERSION_PATCH=0

我们可以使用正则表达式匹配的方法获取版本号配置

^PROJECT_VERSION_MAJOR=([0-9]+)$  # 用于匹配主版本号
^PROJECT_VERSION_MINOR=([0-9]+)$  # 用于匹配次版本号
^PROJECT_VERSION_PATCH=([0-9]+)$  # 用于匹配修订版本号

在CMakeLists.txt添加如下内容

# 读取版本号配置文件,名称应该保持一致
file(STRINGS "${CMAKE_SOURCE_DIR}/version_config" version_config)

# 解析版本号
foreach(line IN LISTS version_config)
    if(line MATCHES "^PROJECT_VERSION_MAJOR=([0-9]+)$")
        set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1})
    elseif(line MATCHES "^PROJECT_VERSION_MINOR=([0-9]+)$")
        set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1})
    elseif(line MATCHES "^PROJECT_VERSION_PATCH=([0-9]+)$")
        set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_1})
    endif()
endforeach()

# 组合之前提取的主版本号、次版本号和修订版本号
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")

# 打印输出
message(STATUS "Project Version: ${PROJECT_VERSION}")

此时构建项目应该有如下输出

Project Version: 1.0.0