gpt4 book ai didi

c++ - 编译时自动包含当前版本号

转载 作者:行者123 更新时间:2023-11-30 05:38:36 24 4
gpt4 key购买 nike

使用源码时,可以使用命令git describe获取当前版本号。

在使用二进制文件时,我添加了一个选项,允许用户传入 --version 标志以获取当前版本号:

if (argc >= 2) {
if (argv[1] == "--version") {
cout << "eval version v0.1-16-g74a9332";
}
}

问题是,值 v0.1-16-g74a9332 现在已硬编码到我的源代码中。如果我离开并在其他地方改变一些东西,我将不得不在每次提交时增加这个值(这只是要求 merge 冲突!)

此外,g74a9332 部分是当前提交的哈希值。如果我在源代码中更改此值,提交的哈希值也会更改。

我有什么办法,而不是将版本号硬编码到代码中,让 c++ 在编译二进制文件时“知道”版本号是 v0.1-16-g74a9332

最佳答案

在构建过程中生成版本号。为此,使用全局变量的声明创建一个 header version.h:

// add include guards
extern char const * const version_string;

要使用版本字符串,请包含该 header 并引用该全局变量。

为简单起见,还为相应的定义创建一个模板,version.c.template:

char const * const version_string =
"v0.1-COMMIT";

然后,在您的 makefile 中添加一条规则,以构建相应的源代码文件,并将该变量定义中的字符串替换为实际的提交号:

COMMIT := $(shell git rev-parse --short HEAD)
.PHONY: version.c
version.c: version.c.template
sed -e "s/COMMIT/$(COMMIT)/g" version.c.template > version.c

version.c 包含到编译和链接过程中。

当然,您可以将其扩展到几乎可以在构建期间生成大量信息。

(我在手机上,因此没有测试上面的代码)


由于编译器对您如何组织源代码一无所知,因此没有这样的标志。

关于c++ - 编译时自动包含当前版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com