自动将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