我正在使用autotools和git来编写C/C++程序。
我希望我的程序能够显示它是从哪个commit编译的。例如,它将显示:
$ 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')\"
但是这个语法在自动化构建中会产生错误:
并且在Vim的语法高亮中显示为红色(文件类型为automake)。src/Makefile.am:3: 警告:shell git log -1 --pretty='%h':非POSIX变量名src/Makefile.am:3:(可能是GNU make扩展)
解决方案是直接将此行传递给最终的Makefile,但我该如何在Makefile.am中实现呢?我尝试转义
$
符号,但没有成功。
git describe
将更加美观