我想知道是否有办法将Mercurial标签嵌入到我的C / C ++代码中。
基本上我希望标签字符串最终成为一个版本号(major.minor.rev),自动插入我的C代码的确定位置作为静态字符串。
总体目标是,在使用'-v'命令行参数执行时,可以查询应用程序的版本号。任何不涉及尝试嵌入Mercurial标签的替代方法也将作为答案受到欢迎。
我在Linux环境中使用Code :: Blocks,因此解决方案不能依赖Visual Studio功能。
答案 0 :(得分:6)
您需要keyword extension来扩展关键字条目,它与mercurial捆绑在一起。
例如,要获得对$Id$
的支持,您可以为您的仓库编辑hgrc(.hg/hgrc
)并添加:
[extensions]
keyword =
[keyword]
# Enable expansion for the specific files
myfile.cpp =
# Enable for all .h files
**.h =
然后运行
hg kwexpand
将关键字扩展为相关文件,或
hg kwshrink
缩小关键字。您甚至可以通过添加[keywordmaps]
条目来创建自己的关键字,例如
[keywordmaps]
User = {author|user}
注意:这会禁用内置关键字
有关扩展程序的更多详细信息,请参见in the wiki。
答案 1 :(得分:0)
我们使用宏
#define CVS(a) static const volatile char *rcsid = a;
....
CVS("$Id$")
CVS自动扩展$ Id $。我认为这也是mercurial标签的作用。
然后我们可以使用strings命令查找可执行文件/库中每个文件的确切版本。
你可以使用类似的东西。
static const volatile char *rcsid = "$Id"; //or whatever mercurial tag you want
int main() {
.....
std::cout << "Version is " << rcsid << std::endl;
}