【发布时间】:2015-12-16 09:07:01
【问题描述】:
使用源码时,可以使用命令git describe获取当前版本号。
在使用二进制文件时,我添加了一个选项,允许用户传入--version 标志以获取当前版本号:
if (argc >= 2) {
if (argv[1] == "--version") {
cout << "eval version v0.1-16-g74a9332";
}
}
问题是,值v0.1-16-g74a9332 现在已硬编码到我的源代码中。如果我离开并在其他地方更改某些内容,则每次提交时都必须增加此值(这只是要求合并冲突!)
此外,g74a9332 部分是当前提交的哈希。如果我在源代码中更改此值,则提交的哈希值会更改。
我有什么办法,而不是将版本号硬编码到代码中,让 c++ 在编译二进制文件时“知道”版本号是v0.1-16-g74a9332?
【问题讨论】:
-
我也在使用
make进行编译,因此允许包含该要求的答案,但我希望有某种编译器选项或功能。 -
我也对解决方案感兴趣。我通常将版本包含为分支(主要)/cmets(次要)。
-
@IQAndreas 您的代码中存在基本错误(以及@Oleg 的其他正确解决方案)。
argv[1] == "--version"是两个不同的char *指针的比较,并且总是会失败。你需要std::string(argv[1]) == "--version"
标签: c++ git compilation makefile version