0

如何在 Eclipse(STM32CubeIDE)中自动将 git 版本(git describe)添加到 C 代码字符串?

这在使用自定义 makefile 时非常简单:

exe:
    @touch ./myMainProgram.c
    @echo -n "#define GIT_VERSION  \""                  >  ./git_ver.h
    @echo -n `git describe --abbrev=7 --dirty --always` >> ./git_ver.h
    @echo "\""                                          >> ./git_ver.h

在您的 C 代码中,您包含git_ver.h并打印版本,例如printf("Version [%s]\n", GIT_VERSION);

警告:不要使用 git 签入和跟踪git_ver.h,因为任何时候它发生变化,git describe都会将您的版本标识为“脏”。

但在 Eclipse (STM32CubeIDE) 中,我无法直接编辑 makefile,因为它是自动生成的。我如何完成同样的事情?

4

1 回答 1

0

通过查看自动生成的makefile,您会注意到此部分:

-include ../makefile.defs

您可以创建自己的makefile.defs文件并添加以下内容

OBJS += doGitVersion

doGitVersion:
    @touch ./myMainProgram.c
    @echo -n "#define GIT_VERSION  \""                  >  ./git_ver.h
    @echo -n `git describe --abbrev=7 --dirty --always` >> ./git_ver.h
    @echo "\""                                          >> ./git_ver.h

顺便说一句,@touch可以强制重新编译myMainProgram.c(从而刷新已GIT_VERSION编译二进制文件中的值)。如果你不这样做,如果没有任何改变,通常构建系统实际上不会重新编译代码。

一个典型的情况是你做了一个 git commit、re-build 和 re-test。一切看起来都很好,所以你标记发布v1.0.2并重新构建。如果你没有这@touch条线,因为构建系统检测到没有任何变化,它实际上不会重新编译任何东西,你可能会v1.0.1-1-gfe093cd在编译的二进制文件中留下类似GIT_VERSION.

通过使用该@touch行,您将确保myMainProgram.c重新编译并GIT_VERSION准确反映git describe --abbrev=7 --dirty --always返回的内容。

于 2021-03-14T15:58:17.353 回答