【C++】关于代码编译自动更新版本的问题

news2025/1/20 3:46:52

在写代码的时候,总是需要添加一个版本号,用于后续的版本管理

我常遇到的一个问题是,开发过程中,不一定会记得这件事情,导致有时候会出现同样的版本

于是希望有一个方式,能在编译代码的时候自动生成一个版本号

1.创建update_version.cmake文件

# 设置项目版本号
set(PROJECT_VERSION_MAJOR 1)
set(PROJECT_VERSION_MINOR 0)

# 读取 version.h 文件
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.h")
    # 读取 PROJECT_VERSION_PATCH 的值
    file(READ "version.h" VERSION_H_CONTENTS)
    string(REGEX MATCH "PROJECT_VERSION_PATCH \"([0-999]+)\"" _match ${VERSION_H_CONTENTS})
    set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_1})
    message(STATUS "Read patch: ${PROJECT_VERSION_PATCH}")

    # 将 PROJECT_VERSION_PATCH 值加 1
    math(EXPR PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH} + 1")
    set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
    message(STATUS "更新版本号: ${PROJECT_VERSION}")
else()
    set(PROJECT_VERSION_PATCH 1)
endif()
 
# 获取编译日期
string(TIMESTAMP PROJECT_COMPILE_YEAR "%Y" UTC)
string(TIMESTAMP PROJECT_COMPILE_MONTH "%m" UTC)
string(TIMESTAMP PROJECT_COMPILE_DAY "%d" UTC)
string(TIMESTAMP PROJECT_COMPILE_TIME "%Y-%m-%d %H:%M:%S" UTC)
  
# 生成版本文件
configure_file(version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/version.h @ONLY)

2.创建version.h.in文件

#ifndef VERSION_H
#define VERSION_H

#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@"

#define PROJECT_COMPILE_YEAR "@PROJECT_COMPILE_YEAR@"
#define PROJECT_COMPILE_MONTH "@PROJECT_COMPILE_MONTH@"
#define PROJECT_COMPILE_DAY "@PROJECT_COMPILE_DAY@"
#define PROJECT_COMPILE_TIME "@PROJECT_COMPILE_TIME@"

#endif

3.创建version.h文件

无内容

4.修改cmakelist.txt文件

# 创建自定义目标, 执行 update_version.cmake 脚本
add_custom_target(
    update_version
    COMMAND ${CMAKE_COMMAND} -D GIT_VERSION=${GIT_VERSION} -P ${CMAKE_CURRENT_SOURCE_DIR}/update_version.cmake
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

add_dependencies(${PROJECT_NAME} update_version)

5.使用效果

会在目录下自动生成一个版本头文件

重新编译一下

版本文件会自动更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

价值驱动型PMO如何实现项目战略目标?

近期,看到一个帖子,一位PMO(小刘)吐槽自己就是一个无情的项目推动机器,但还总被领导diss,他不知道问题出在哪了。评论区也有很多项目管理人吐槽自己也踩过类似的坑,那么本期就围绕这个案例展开相…

后端程序员的Linux命令指南

后端程序员的终极命令指南:考考自己是不是真正掌握Linux的使用 欢迎各位穿着格子衬衫,常年抱着键盘睡觉的后端小伙伴们👋👋👋!今天,考考你们是不是掌握以下让你们在日后在服务器上叱咤风云的命令…

【环境变量问题:计算机删除环境变量的恢复方法;此环境变量太大。此对话框允许将值设置为最长2047个字符】

不小心误删了win10系统环境变量可以试试下文方法恢复。 本方法针对修改环境变量未重启的用户可以使用,如果修改环境变量,然后还重启了,只能说重新来。 方法一:使用命令提示符恢复 被修改的系统Path只是同步到了注册表中&#x…

天津这场智博会,成了智能时代的风向标

毫无疑问,这是一场智能产业的盛宴。 2024年6月20日至23日,国家会展中心(天津)迎来了一场智能科技领域的盛会——世界智能产业博览会:这场以“智行天下、能动未来”为主题的博览会,汇聚了全球49个国家和地区…

海外版coze前端代码助手

定位 解决前端同事的开发问题 参数配置 测试 支持 最屌的大模型及语音播报。 体验地址 海外版前端代码助手 需要魔法才能体验油

智能网联汽车实训教学“好帮手”——渡众机器人自动驾驶履带车

智能网联汽车实训教学“好帮手”——渡众机器人自动驾驶履带车 人工智能技术的兴起,为传统汽车行业注入了强有力的变革基因,以AI技术为驱动的无人驾驶成为汽车产业的未来,同样也面临诸多机遇和挑战。 一方面智能网联汽车的发展,为…

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能

【启明智显产品介绍】工业级HMI芯片Model3C详解(一)芯片性能 Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU,配置平头哥E907,主频400MHz,强大的 2D 图形加速处理器、PNG/JPEG 解码引擎…

[240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞

目录 Anthropic 发布 Claude 3.5 Sonnet AI 助手Scoket.IO 拒绝服务漏洞(CVE-2024-38355) Anthropic 发布 Claude 3.5 Sonnet AI 助手 Claude 3.5 Sonnet: 更智能、更快速、更安全的 AI 助手 一、 引言 Anthropic 发布了 Claude 3.5 Sonnet&#xff0…

excel基本操作

excel 若要取消在数据表中进行的所有筛选 步骤操作: 单击“数据”选项卡。在“排序和筛选”组中,找到“清除”按钮。点击“清除”按钮。 图例: 将文本文件的数据导入到Excel工作表中进行数据处理 步骤: 在Excel中&#xff0c…

详细解读“找不到mfc140u.dll无法继续执行代码”问题

当你打开某个软件或者运行游戏,系统提示mfc140u.dll丢失,此时这个软件或者游戏根本无法运行。其实,mfc140u.dll是动态库文件,它是VS2010编译的软件所产生的,如果电脑运行程序时提示缺少mfc140u.dll文件,程序…

高德行政区查询-综合省市县三级选择跳转

一、需求: 需要使用高德地图进行省市县的一个选择,每选择一次就在地图上对选择的省市县进行定位并画出该区域的范围。 最终效果: 二、准备工作 高德的API的key:两种 三、完整页面代码 综合的是这两篇中的内容(不…

python pyautogui实现图片识别点击失败后重试

安装库 pip install Pillow pip install opencv-python confidence作用 confidence 参数是用于指定图像匹配的信度(或置信度)的,它表示图像匹配的准确程度。这个参数的值在 0 到 1 之间,数值越高表示匹配的要求越严格。 具体来…

Java中将文件转换为Base64编码的字节码

在Java中,将文件转换为Base64编码的字节码通常涉及以下步骤: 读取文件内容到字节数组。使用java.util.Base64类对字节数组进行编码。 下面是一个简单的Java示例代码,演示如何实现这个过程: import java.io.File; import java.io…

实验13 简单拓扑BGP配置

实验13 简单拓扑BGP配置 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 BGP(Border Gateway Protocol,边界网关协议)是一种用于自治系统间的动态路由协议,用于在自治系统(AS&…

太牛了!AI换脸数字人,限制解除,免费用!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利一款美图公司出品的神器,功能限制完全解除,可以免费使用AI换脸数字人、AI提词器、AI脚本、AI抠图、AI清除、AI封面等超多超实用功能,…

鸿蒙开发:【进程模型概述】

进程模型概述 系统的进程模型如下图所示: 应用中(同一包名)的所有PageAbility、ServiceAbility、DataAbility、FormAbility运行在同一个独立进程中,即图中绿色部分的“Main Process”。 WebView拥有独立的渲染进程,即…

python20 函数的定及调用

函数的定及调用 函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。以此达到一次编写,多次调用的目的 用 def 关键字来声明 函数 格式: def 函数名(参数列表):函数体[:return 返回值是可选的&#xff0…

苍穹外卖环境搭建

一、前端环境搭建 ①整体结构 ②前端工程基于nginx运行 启动nginx:双击 nginx.exe 即可启动 nginx 服务,访问端口号为 80 进入浏览器地址输入locallhost回车 二、后端环境搭建 后端初始工程基于maven进行项目构建,并且进行分模块开发 (1) idea打开初始…

用Python的Pygame包实现水果忍者小游戏

先上一下运行结果 长按鼠标左键出刀, 切割水果几分, 切割炸弹结束游戏, 漏掉的水果也会几分, 难度会随时间慢慢提高(水果的刷新频率变快) 初始化 帧率200帧/秒, 游戏窗口大小800600 # 游戏设置 pygame.init() FPS 200 fpsClock pygame.time.Clock() WIDTH, HEIGHT 800, 60…