Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330852
  • 博文数量: 47
  • 博客积分: 834
  • 博客等级: 军士长
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-07 09:38
文章分类
文章存档

2018年(1)

2015年(1)

2014年(2)

2013年(2)

2012年(23)

2011年(18)

分类: 嵌入式

2018-08-17 10:06:52

实现这个的思路是Makefile中获取到工程的git的commit信息,获取编译的日期,然后通过-D的方式把这些信息传递给程序中,如下Makefile中增加信息:


COMPILE_TIME = $(shell git log -1 --format="%ad" --date=short)
GIT_REVISION = $(shell git rev-parse --verify --short HEAD 2>/dev/null)
GIT_DIRTY    = $(shell git diff . 2>/dev/null)

ifneq "$(GIT_DIRTY)" ""
GIT_DIRTY_FLAG = "$(GIT_REVISION)-dirty"
else
GIT_DIRTY_FLAG = "$(GIT_REVISION)"
endif

CFLAGS  := $(addprefix -I, $(IDIR))
CFLAGS  += -Wall
CFLAGS  += -DCOMPILE_TIME="\"$(COMPILE_TIME)\""
CFLAGS  += -DGIT_REVISION="\"$(GIT_DIRTY_FLAG)\""

执行编译时候大概就是类似这样的:
arm-none-linux-gnueabi-gcc -I../include -Wall -DCOMPILE_TIME="\"2018-08-16\"" -DGIT_REVISION="\""efed795"\""   -c -o test.o test.c

通过这种方式可以把GIT_REVISION和COMPILE_TIME两个值以宏定义的方式传递给程序,这两个宏定义的赋值就是前面获取到的GIT_DIRTY_FLAG和COMPILE_TIME。在程序里面就可以直接用这两个宏定义了,直接可以打印出来。

后来想增加-dirty这样的方式,参考linux的kernel的版本号,我用了git diff .查看当前工程是否有文件变更,有的话就是-dirty版本,否则就是纯净可发布版本。不过这个地方有个问题,就是我没有修改原有工程时候,增加了新的程序文件,而且没有通过git add进去,这个时候git diff .还是判定为纯净版本,暂时没想到其他更好的办法,不过仔细分析一下,如果在工程里增加了文件,但是你没有修改Makefile和原来工程里的任何文件,貌似也没有影响,增加的文件对编译结果不产生任何影响,应该也是能用这种方式的。
阅读(2370) | 评论(0) | 转发(0) |
0

上一篇:ubuntu10.04安装qt-arm-4.7.4

下一篇:没有了

给主人留下些什么吧!~~