【问题标题】:Displaying from which git commit a binary was compiled显示从哪个 git commit 编译二进制文件
【发布时间】: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 可以轻松采用

标签: git makefile autotools


【解决方案1】:

添加

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

到你的 Makefile 和

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

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

【讨论】:

  • 它不起作用,因为我正在使用 automake Makefile.am,请参阅我的编辑
  • @yolenoyer - 1) 尝试使用git describe 2) 见stackoverflow.com/questions/4196236/… 的想法
  • 好的,它正在工作:我在编辑中没有意识到,这只是一个警告。谢谢
【解决方案2】:

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

你可以在你的 Makefile 中做:

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

然后在您的 C/C++ 源文件中使用 GIT_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 describe 打印标签。

【讨论】:

  • 它不起作用,因为我正在使用 automake Makefile.am,请参阅我的编辑
【解决方案3】:

在 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中

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 2018-11-11
    • 2015-01-25
    • 1970-01-01
    • 2015-10-04
    • 2016-12-01
    • 2013-01-03
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多