【发布时间】:2017-10-17 17:13:11
【问题描述】:
我想知道如何在编译后的二进制文件中将 Git 提交哈希和/或其他信息放入 C++ 变量的内容中,而无需将其作为 Git 跟踪的源的一部分。
我需要在嵌入式处理器上运行的已编译可执行文件中跟踪固件版本信息。识别固件二进制文件特定版本的方法,例如有意义的文件名、MD5 校验和甚至日期/时间戳在这个封闭的环境中不可用(即没有文件系统)。
一种方法是让设备的控制台输出生成识别文本,例如“Release 1.2.3”、“commit hash 1bc123...”或类似内容。固件版本信息仅对维护人员感兴趣,因此经过培训的操作员可以检查控制台输出。要实现这一点,可能需要手动编辑版本字符串,然后将其编译成代码并在程序启动时输出到控制台。
这对于使用签核工作流程来仔细检查版本信息是否正确的主要版本是可以接受的。然而,这是一个手动过程,它本质上是不可靠的。比如开发者忘记更新版本信息怎么办? - 现在已编译的代码与其报告的版本字符串之间存在脱节。
每次用户想要测试硬件时都重新编译和下载代码的工作流程在所讨论的情况下是不切实际的,即更新固件非常繁重。
因此需要一种自动识别代码版本的方法。在有问题的情况下,使用了 Git,开发人员定期将他们的工作提交给功能分支。显示 Git 提交哈希,以及是否有未暂存的更改,将是识别用于编译固件的源代码状态的一种方式。
要求是我希望我的应用程序有可用的信息,以便它能够显示: "Git 提交:[01abcdef...etc],分支:experimentalStuffDoNotRelease"
因此,我想在编译的 C 和/或 C++ 代码中自动包含 Git 信息,例如提交哈希和分支。
开发环境有使用 Windows 和 Linux 的开发人员,并使用 Eclipse CDT 和相对简单的工作流程:检查;编译;下载到硬件。
【问题讨论】:
-
如果您将其归结为基本要素,这将是一个更好的问题:省略所有工作流程的内容,只需询问如何将 git 提交哈希和/或其他信息放入内容中编译后的二进制文件中的 C++ 变量,而不是它是 git 跟踪的源的一部分。 (知道好的答案看起来应该会让这更容易)。另请参阅meta.stackoverflow.com/questions/351446/lifting-the-review-ban。
-
@PeterCordes,谢谢 - 我实际上添加了更多信息,因为我有一个“太宽泛”的诅咒。另外,我特别想针对 Eclipse,因为它没有使用标准的“制作”工作流程 (AFAIK)。
-
您应该编辑它,以便尽早明确真正的问题。在说明具体问题后,您可以稍后详细说明您想要它的原因。询问如何为 Eclipse 构建执行此操作对我来说似乎非常具体。所有关于工作流程的讨论都会分散注意力,并为可能的替代解决方案打开了大门,这可能是它过于宽泛的原因。您的用例只是让程序能够打印其版本信息(包括提交 ID)很方便的众多原因之一。
-
哦,刚刚看了你的第一个版本。与其询问如何让您的应用程序显示它,不如询问如何在构建时将 git 版本信息获取到变量中,而无需将版本字符串作为版本控制源的一部分。问怎么展示肯定是太笼统了;在将版本字符串放入 CPP 宏或全局变量后,我们将把这部分留给您。
标签: c++ c git eclipse-cdt