编程时,有时需要打印版本号或者根据版本号来判断逻辑分支走向,前者一般是字符串形式的版本号,后者一般是整型数表达的版本号。
所以需要设计一个相对通用的版本号定义、升级和生成方法,来方便我们使用。
版本号定义
通常我们使用GNU版本号定义方法,如下所示:
主版本号.子版本号.修正版本号.编译版本号
版本号按如下规则升级:
1)当项目有重大修改或局部修正累积较多时,项目整体发生了全局变化,此时主版本号+1,其他版本号归零;
2)当项目增加功能或需求变更时,主版本号不变,子版本号+1,修正版本号归零;
3)当项目调整功能或缺陷修正时,主版本号不变,子版本号不变,修正版本号+1;
4)编译版本号是在迭代开发过程中进行累加,以供测试人员标识各修复缺陷的版本;
版本号实现
一般,我们把软件的版本号定义在一个独立的文件中,比如叫做version.h,然后在其中定义各级版本号,其他文件引用version.h即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #ifndef __XHELLO_VERSION_H__ #define __XHELLO_VERSION_H__
#define _SX_N2S_(num) #num #define _SX_N2T_(major,minor,patch,build) _SX_N2S_(major) "." _SX_N2S_(minor) "." _SX_N2S_(patch) "." _SX_N2S_(build) #define _SX_N2N_(major,minor,patch,build) ((major)*1000000 + (minor)*10000 + patch*100 + build)
#define XHELLO_VER_MAJOR 1 #define XHELLO_VER_MINOR 3 #define XHELLO_VER_PATCH 25 #define XHELLO_VER_BUILD 1
#define XHELLO_VERSION _SX_N2T_(XHELLO_VER_MAJOR,XHELLO_VER_MINOR,XHELLO_VER_PATCH,XHELLO_VER_BUILD) #define XHELLO_VERSION_NUMBER _SX_N2N_(XHELLO_VER_MAJOR,XHELLO_VER_MINOR,XHELLO_VER_PATCH,XHELLO_VER_BUILD)
#endif
|
按上述版本号定义规则,可知示例代码所表达的含义如下:
- XHELLO表示软件名称,此处替换成你自己的软件名称;
- XHELLO软件的版本号,用字符串来表达就是 1.3.25.1,用整型数来表达就是 1032501;
- 变更版本号时,仅调整XHELLO_VER_MAJOR、XHELLO_VER_MINOR、XHELLO_VER_PATCH、XHELLO_VER_BUILD,其他宏保持不动;
使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> #include "version.h"
int main(int argc, char **argv) { std::cout << "version:" << XHELLO_VERSION << std::endl; if (XHELLO_VERSION_NUMBER > 1031901) { } else { } return 0; }
|