繁体   English   中英

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

[英]automatically add git version (git describe) to C code string in Eclipse (STM32CubeIDE)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM