一种cmake下创建软件版本号

创建version.h.in

#pragma once

#define PROJECT_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
#define PROJECT_VERSION_MINOR @PROJECT_VERSION_MINOR@
#define PROJECT_VERSION_PATCH @PROJECT_VERSION_PATCH@
#define PROJECT_VERSION "@PROJECT_VERSION@"

CMakeLists.txt

修改 CMakeLists.txt,配置configure_file

cmake_minimum_required(VERSION 3.14)

project(test VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 配置版本头文件
configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/version.h.in
    ${CMAKE_CURRENT_BINARY_DIR}/version.h
)

# 添加可执行文件
add_executable(test main.cpp)

# 包含生成的 version.h 目录
target_include_directories(test PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

使用

main.cpp

#include <iostream>
#include "version.h"

int main() {
    std::cout << "Project Version: " << PROJECT_VERSION << std::endl;
    return 0;
}

构建时,cmake 会生成 build/version.h,里面会替换成

#define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 0
#define PROJECT_VERSION_PATCH 0
#define PROJECT_VERSION "1.0.0"

输出:

./test
Project Version: 1.0.0

comment: