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

Posted

技术标签:

【中文标题】自动将git版本(git describe)添加到Eclipse(STM32CubeIDE)中的C代码字符串【英文标题】:automatically add git version (git describe) to C code string in Eclipse (STM32CubeIDE) 【发布时间】:2021-06-12 01:04:44 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于自动将git版本(git describe)添加到Eclipse(STM32CubeIDE)中的C代码字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Git 的 `describe` 命令派生应用程序构建版本字符串?

`git describe` 与 gitlab python API

如果提交有两个标签,git describe --match 返回错误的标签名称

msbuild怎么添加 到环境变量

DevOps: 自动部署语义化版本实操

Git changelog:如何将所有更改都添加到特定标记?