自动将git版本git describe添加到Eclipse中的C代码字符串STM32CubeIDE

问题描述

我如何在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,因为它是自动生成的。我如何完成同样的事情?

解决方法

通过查看自动生成的 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、重新构建和重新测试。一切看起来都不错,因此您使用 v1.0.2 标记发布并重新构建。如果您没有 @touch 行,由于构建系统检测到没有任何变化,它实际上不会重新编译任何东西,并且您可能会在编译的二进制文件中留下诸如 v1.0.1-1-gfe093cd 之类的东西GIT_VERSION 的值。

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