需求背景#
在开发过程中,我们经常需要给应用添加版本信息,以便于追踪和管理应用的版本。
对于windows
平台,直接在Project
->Project Options...
对话框中的Project Options
->Version Info
内进行设置即可。
但是,对于非windows
平台,该方案便不可行。
而且,该方案还存在一个明显的问题:版本信息需要手动维护,未能与版本控制系统
进行有效关联,很可能出现应用与源码不一致
的情况。
解决思路#
-
不使用Version Info
功能,但取其把版本信息编译到可执行文件中
的思想。
-
借鉴vscode
的关于
方案,版本信息中包含版本号
和提交ID
即可使应用和源码进行关联。
-
只要解决了在构建时动态获取版本信息
的问题,便可以解决该问题。
解决方案#
经多种尝试,最终确定的方案如下:
-
在源码中添加ver.inc
文件,用于存储版本信息,在关于
界面等进行展示。
-
编写脚本,获取版本信息并写入ver.inc
文件。
-
打开Project
->Project Options...
对话框,在Compiler Options
->Compiler Commands
->Execute before
中添加脚本的路径。
-
正常构建应用即可。
-
如要跨平台,可分别编写对应平台的脚本并创建对应的Build mode
,在Build modes
中选择对应的模式,然后配置对应的脚本,正常构建即可。
附脚本#
以使用git
为例:
windows#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@echo off
::获取版本号
git describe --tags >nul 2>nul
if errorlevel 1 (
set VER_NO=0.0
) else (
for /f "delims=" %%a in ('git describe --tags') do set VER_NO=%%a
)
::获取提交id
git rev-parse HEAD >nul 2>nul
if errorlevel 1 (
set COMMIT_ID=0000000000000000000000000000000000000000
) else (
for /f "delims=" %%b in ('git rev-parse HEAD') do set COMMIT_ID=%%b
)
::写入文件
echo const > ver.inc
echo VER_NO = '%VER_NO%'; >> ver.inc
echo COMMIT_ID = '%COMMIT_ID%'; >> ver.inc
|
linux#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/bash
# 获取版本号
VER_NO=$(git describe --tags 2>/dev/null)
if [ $? -ne 0 ]; then
VER_NO="0.0"
fi
# 获取提交ID
COMMIT_ID=$(git rev-parse HEAD 2>/dev/null)
if [ $? -ne 0 ]; then
COMMIT_ID="0000000000000000000000000000000000000000"
fi
# 写入文件
echo "const" > ver.inc
echo "VER_NO = '$VER_NO';" >> ver.inc
echo "COMMIT_ID = '$COMMIT_ID';" >> ver.inc
|