使用源代码时,您可以使用命令this->x
获取当前版本号。
使用二进制文件时,我添加了一个选项,允许用户传入git describe
标志以获取当前版本号:
--version
问题是,值if (argc >= 2) {
if (argv[1] == "--version") {
cout << "eval version v0.1-16-g74a9332";
}
}
现在已硬编码到我的源代码中。如果我去其他地方更改某些内容,我每次提交时都必须增加此值(这只是要求合并冲突!)
此外,部分v0.1-16-g74a9332
是当前提交的哈希。如果我在源代码中更改此值,则提交的哈希值会更改。
对我来说有没有办法,而不是将版本号硬编码到代码中,有c ++&#34;知道&#34;编译二进制文件时版本号是g74a9332
吗?
答案 0 :(得分:1)
在构建期间生成版本号。为此,使用全局变量的声明创建标题git revert f1c9df7d7f..fd04cfd1c3e
:
version.h
要使用版本字符串,请包含该标头并引用该全局变量。
为了简单起见,还要为相应的定义创建模板// add include guards
extern char const * const version_string;
:
version.c.template
然后,在你的makefile中添加一个规则来构建相应的源代码文件,在该变量的定义中用字符串替换为实际的提交号:
char const * const version_string =
"v0.1-COMMIT";
将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
包括在编译和链接过程中。
当然,您可以在构建期间大量扩展以生成大量信息。
(我在手机上,因此没有测试上述代码)
由于编译器对您如何组织源代码一无所知,因此没有这样的标记。
答案 1 :(得分:0)
您必须稍微更改代码
if (argc >= 2) {
if (std::string(argv[1]) == "--version") {
cout << MY_VERSION;
}
}
然后,您的Makefile必须是:
result=$(shell git describe)
all:
g++ -DMY_VERSION=\"$(result)\" -o main main.cpp
clean:
rm -f main