显示编译二进制文件的git提交源
我正在C/C++程序中使用autotools和git 我希望我的程序能够显示它是从哪个commit编译的。例如,它将显示:显示编译二进制文件的git提交源,git,makefile,autotools,Git,Makefile,Autotools,我正在C/C++程序中使用autotools和git 我希望我的程序能够显示它是从哪个commit编译的。例如,它将显示: $ myprog --version Binary compiled from commit 9ddb505 在bash中,很容易确定当前提交: COMMIT=$(git log -1 --pretty='%h') 但此语法在Makefile.am文件中无效 假设我有一个非常简单的Makefile.am: bin_PROGRAMS = myprog myprog_SOU
$ 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??\"
COMMIT=\"$(shell git log -1 --pretty='%h')\"
考虑到提交名称在每次调用make
时必须是最新的,如何将正确的提交值传递给源代码
编辑 我也尝试过(在Makefile.am中): 但此语法会在automake中生成错误: src/Makefile.am:3:警告:shell git日志-1--pretty='%h':非POSIX 变量名src/Makefile.am:3:(可能是GNUmake扩展名) ,并用Vim的语法(filetype=automake)将其涂成红色 解决方案是直接传递这一行以包含在最终的Makefile中,但是如何在Makefile.am中实现这一点呢?我试图避开
$
符号,但没有成功。添加
GITVERSION:= $(shell git log -1 --pretty='%h')
到您的Makefile和
-DGITVERSION="\"${GITVERSION}\""
您可以在代码中使用GITVERSION,我想对您来说,缺少的链接似乎是Make中的shell cmd 您可以在Makefile中执行以下操作:
GIT_MSG=\"$(shell git log -1 --pretty='%h')\"
CFLAGS=-Wall -DGIT_COMMIT=$(GIT_MSG)
然后在C/C++源文件中使用GIT\u COMMIT
作为宏
附言:
将以下内容用于类似于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 Descripte打印标签。在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中1。标签发布2。对于带标签的DAG,
git descripe
将更加简洁,通过git rev parse@
可以更直接地获得相同的结果。纯粹的美学,让季节来品味。对于自动工具,可以很容易地为GitIt采用它不起作用,因为我正在使用automake Makefile.am,请参阅我的editIt不起作用,因为我正在使用automake Makefile.am,请参阅我的edit@yolenoyer1)尝试使用git descripe2)查看ideasOk,它正在工作:我在编辑中没有意识到,这只是一个警告。谢谢