我们如何在 C++ 中将版本控制应用于 executable/binaries?

How can we apply versioning to executable/binaries in C++?

我有一个大型 C++ 应用程序,我们正在通过 Jenkins 编译它并生成包含二进制文件、headers、配置和其他相关文件的压缩工件。构建以服务的形式部署在客户端。问题是如何在这些二进制文件上应用版本以了解在哪个客户端上部署了哪个版本?

与早期的 C# 应用程序一样,我们使用我们在 GIT 上应用的标记对 AssemblyVersion 文件进行更改,然后编译,我们可以看到可执行文件应用了版本。有没有办法在 C++ 中做同样的事情?

我们正在使用 CMakeLists.txt 文件生成构建。我们有 linux 基于环境 (CentOS 7.5) 的应用程序是用 C++ 开发的。

提前致谢!

由于您使用的是 CMake,因此您可以使用 CMakeLists.txt 中的 configure_file() 函数创建一个 C++ 源文件,其中包含您的 Git 版本信息作为字符串,然后将创建的文件包含到您的目标中。

您可以通过从 CMake 调用 git 可执行文件,将 Git 版本信息放入 CMake 变量中,尽管有 prewritten modules 可以完成繁重的工作。

然后您可以使用命令行 stringsgrep 工具在二进制文件中查找版本字符串,或者使用其他方法以编程方式获取它,具体取决于您是否正在制作可执行文件或库。