【发布时间】:2016-08-08 06:45:31
【问题描述】:
我在 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': non-POSIX 变量名 src/Makefile.am:3: (可能是 GNU make 扩展)
,用 Vim 的语法 (filetype=automake) 用红色着色。
解决方案是直接传递这一行以包含在最终的 Makefile 中,但是如何在 Makefile.am 中执行此操作?我试图逃脱$ 标志,但没有成功。
【问题讨论】:
-
1.标记发布 2. 标记 DAG
git describe会更漂亮 -
顺便说一句,使用
git rev-parse @可以更直接地获得相同的结果。纯粹的美学,所以季节来品尝。 -
Mercurial's makefile 用于 autotools,Git 可以轻松采用