C语言库编译时添加编译时间和svn版本号

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言库编译时添加编译时间和svn版本号相关的知识,希望对你有一定的参考价值。

1、功能应用背景和开发思路

(1)应用背景:当程序出错时,我们想要知道库的版本信息,这样有助于定位错误是哪个版本引入的,缩小排查的范围;就算程序没有出错,能知道库的版本,也方便知道程序的版本;
(2)思路:在编译源码时,获取svn版本和编译时间并编译进源码,在库的初始化函数里将svn版本和编译时间打印出来;

2、获取svn版本号

[aston]$ svn info
Path: .
Working Copy Root Path: xxxxxx
URL: xxxxxxxxxxxxxxxx
Relative URL: xxxxxxxxxxxxxx
Repository Root: xxxxxxxxxxxxxxxxxxxx
Repository UUID: 0191c7e8-835f-43ee-9283-22566a29a934
Revision: 1804
Node Kind: directory
Schedule: normal
Last Changed Author: xxxxx
Last Changed Rev: 1069
Last Changed Date: 2022-09-08 16:24:59 +0800 (Thu, 08 Sep 2022)

使用"svn info"命令可以查看当前库的svn信息,其中就包括版本信息,比如从上面的信息里可知当前版本号是1069,我们需要做的就是在编译程序时通过脚本来自动获取svn版本号;

3、修改Makefile获取svn版本

#获取svn版本号
SVN_NUM   := $(shell svn info ../ \\
              | sed -n '/.*-*:*:*+./g;1!p;;h' \\
              | grep -oP "\\d+")

# It use default value -1 when there was no svn.
ifeq ($(SVN_NUM),)
$(warning No svn in the code, using value -1 as svn number !)
SVN_NUM  := -1
endif

#添加SVN_NUM宏
CFLAGS += -DSVN_NUM=$(SVN_NUM)

4、打印svn版本和时间

printf("-----------------------------------------------------------\\n");
printf("libxxx Build on %s at %s.\\n", __DATE__, __TIME__);
printf("==========SVN NUM: %d.\\n", SVN_NUM); 
printf("-----------------------------------------------------------\\n");

(1)__DATE__和__TIME__是两个编译宏,能自动获取时间,使用十分简单;
(2)DATE:当前的编译日期,TIME:当前编译时间;

5、实现效果

-----------------------------------------------------------
libxxx Build on Mar 11 2023 at 10:18:18.
==========SVN NUM: 1069.
-----------------------------------------------------------

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转

以上是关于C语言库编译时添加编译时间和svn版本号的主要内容,如果未能解决你的问题,请参考以下文章

Linux 搭建SVN服务器(C/S模式)

如何在 C# windows 服务中使用 Git 标签号代替 SVN 版本号

svn访问版本库时一直提示下列内容,没有其他反应,是怎么回事?

从svn下载的项目(或从别处拷贝来的)报错的可能情况以及解决经验

svn使用与问题总结

svn协同开发下的dll版本管理最佳实践