如何在终端构建CMake项目时获取产品版本
在终端通过CMake构建时获取项目版本的方法
当然没问题!你已经在CMakeLists.txt里通过project(sayProject VERSION "1.0")声明了项目版本,下面给你几种在终端构建过程中获取版本信息的实用方法:
方法1:配置阶段直接打印版本
你可以在执行CMake配置命令时,通过自定义参数触发版本信息输出。首先在你的CMakeLists.txt里添加这段代码:
# 当传入PRINT_VERSION参数时,打印版本信息 if(PRINT_VERSION) message(STATUS "当前项目名称:${PROJECT_NAME}") message(STATUS "完整版本号:${PROJECT_VERSION}") message(STATUS "主版本号:${PROJECT_VERSION_MAJOR}") message(STATUS "次版本号:${PROJECT_VERSION_MINOR}") # 如果声明了PATCH版本,也可以打印${PROJECT_VERSION_PATCH} endif()
然后在终端执行CMake配置命令时加上-DPRINT_VERSION=ON:
cmake -S . -B build -DPRINT_VERSION=ON
这样在配置过程中,终端就会直接输出所有你需要的版本信息,无需完成构建。
方法2:生成版本文件供终端查看
如果希望版本信息能持久化保存,方便后续随时查看,可以让CMake自动生成一个版本文件。步骤如下:
- 在项目根目录创建一个
version.in模板文件,内容如下:
项目名称:@PROJECT_NAME@ 完整版本:@PROJECT_VERSION@ 主版本:@PROJECT_VERSION_MAJOR@ 次版本:@PROJECT_VERSION_MINOR@
- 在
CMakeLists.txt里添加配置文件生成逻辑:
configure_file( ${CMAKE_SOURCE_DIR}/version.in ${CMAKE_BINARY_DIR}/version.txt @ONLY )
执行CMake构建后,在build目录下会生成version.txt文件,直接在终端查看即可:
cat build/version.txt
方法3:让编译后的程序输出版本
如果你的项目包含可执行文件,还可以把版本信息编译进程序里,运行程序就能查看。操作如下:
- 在
CMakeLists.txt中给可执行目标添加编译定义:
add_executable(sayApp main.cpp) # 将版本信息作为编译宏定义传入 target_compile_definitions(sayApp PRIVATE PROJECT_VERSION="${PROJECT_VERSION}" PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} )
- 在你的
main.cpp中添加版本输出逻辑:
#include <iostream> int main() { std::cout << "当前程序版本:" << PROJECT_VERSION << std::endl; return 0; }
完成构建后,在终端运行编译后的程序就能看到版本:
./build/sayApp
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

