Skip to content

Latest commit

 

History

History
52 lines (27 loc) · 2.04 KB

File metadata and controls

52 lines (27 loc) · 2.04 KB

      compile git commit sha1 into elf

引言

我们自己会开发一些sdk以动态库的形式发布出去,为了便于问题回溯,我们会手动加上版本号来管理,或者在代码里面加上诸如__DATE__和__TIME__这样的宏来打印出代码编译时候的时间信息,但是如果commit比较频繁,这样还是很难将时间和源代码的版本精确对应起来,这里介绍一种方法,可以自动得获取git commit的sha1信息,将其自动化地编译进sdk。

  • 目标:自动化打印sdk编译时候的git commit sha1信息

  • 限制条件:1. 自动化;2.精确;3. 不可以影响系统正常运行。

欢迎探讨,本文持续维护。

实验平台:

  • 操作系统:Ubuntu 16.04 LTS

  • 编译器:gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

实验过程

这里为了讨论方便,约定sdk库由sdk.cpp编译而成,sdk头文件为sdk.h,应用程序由main.cpp编译而成,中间调用sdk的接口。

目录结构如下:

代码内容如下:

结果分析:

首先在Makefile中用git log, head和cut命令获取当前代码的git commit sha1值,然后将其赋给GIT_COMMIT_SHA1宏,最后通过gcc的-D选项将其告诉编译器。这样就可以在代码里面跟自己定义的字符串一样使用这个GIT_COMMIT_SHA1宏了。

注意,一定要在代码commit后再编译,这样才能使当前仓库最新commit sha1值和代码一致。

总结

本文分享了一种将git commit sha1值自动编译进elf文件的方法,并做了简单的原理介绍,其他版本工应该也可以找到类似的方法。

参考资料