显示编译二进制文件的 git 提交
Displaying from which git commit a binary was compiled
我在 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: warning: shell git log -1 --pretty='%h': non-POSIX
variable name src/Makefile.am:3: (probably a GNU make extension)
,它用 Vim 的语法(filetype=automake)涂成红色。
解决方案是直接将此行传递到最终的 Makefile 中,但我如何在 Makefile.am 中执行此操作?我试图逃脱 $
标志,但没有成功。
添加
GITVERSION:= $(shell git log -1 --pretty='%h')
到您的 Makefile 和
-DGITVERSION="\"${GITVERSION}\""
添加到您的 CPPFLAGS,您可以在代码中使用 GITVERSION
我认为你丢失的 link 似乎是 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 存储库有标签,则使用 git describe
打印标签。
在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
我在 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: warning: shell git log -1 --pretty='%h': non-POSIX variable name src/Makefile.am:3: (probably a GNU make extension)
,它用 Vim 的语法(filetype=automake)涂成红色。
解决方案是直接将此行传递到最终的 Makefile 中,但我如何在 Makefile.am 中执行此操作?我试图逃脱 $
标志,但没有成功。
添加
GITVERSION:= $(shell git log -1 --pretty='%h')
到您的 Makefile 和
-DGITVERSION="\"${GITVERSION}\""
添加到您的 CPPFLAGS,您可以在代码中使用 GITVERSION
我认为你丢失的 link 似乎是 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 存储库有标签,则使用 git describe
打印标签。
在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