显示编译二进制文件的git提交

时间:2016-04-16 07:52:18

标签: git makefile autotools

我在C / C ++程序中使用autotools和git。

我希望我的程序能够显示它编译的提交。例如,它会显示:

$ myprog --version
Binary compiled from commit 9ddb505

在bash中,很容易确定当前的提交:

COMMIT=$(git log -1 --pretty='%h')

但是这个语法在Makefile.am文件中无效。

假设我有一个非常简单的Makefile.am:

bin_PROGRAMS = myprog
myprog_SOURCES = main.c
myprog_CPPFLAGS = -Wall -DGIT_COMMIT=\"??SOMETHING??\"

如果每次调用make时提交名称必须是最新的,我怎样才能将正确的提交值传递给我的源?

修改

我也试过(在Makefile.am中):

COMMIT=\"$(shell git log -1 --pretty='%h')\"

但是这种语法会在automake中产生错误:

  

src / Makefile.am:3:警告:shell git log -1 --pretty ='%h':非POSIX   变量名src / Makefile.am:3 :(可能是GNU make扩展名)

,它用Vim的语法(filetype = automake)用红色着色。

解决方案是直接传递此行以包含在最终的Makefile中,但是如何在Makefile.am中执行此操作?我试图逃脱$标志,但没有成功。

3 个答案:

答案 0 :(得分:1)

添加

GITVERSION:= $(shell git log -1 --pretty='%h')

到您的Makefile和

-DGITVERSION="\"${GITVERSION}\""

到你的CPPFLAGS,你可以在代码中使用GITVERSION

答案 1 :(得分:1)

我认为你缺少的链接似乎是Make中的shell cmd。

您可以在Makefile中执行:

GIT_MSG=\"$(shell git log -1 --pretty='%h')\"
CFLAGS=-Wall -DGIT_COMMIT=$(GIT_MSG)

然后在您的C / C ++源文件中使用GIT_COMMIT作为宏。

P.S:

将以下内容用于master-1399ff4

GIT_MSG=\"$(shell echo "`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`, ")\"

如果您的git repo有任何内容,请使用git describe打印标记。

答案 2 :(得分:0)

在Makefile.am中使用它

AM_CXXFLAGS = -DGIT_VERSION="\"$(shell git log -1 --pretty='%h')\""

您仍然会收到警告

Makefile.am:14: warning: shell git log -1 --pretty='%h': non-POSIX variable name
Makefile.am:14: (probably a GNU make extension)

通过以下方式使它消失:

AM_INIT_AUTOMAKE(-Wno-portability)

在configure.am