如何将Mercurial标签嵌入到我的C / C ++代码中?

时间:2010-02-12 18:00:53

标签: c++ c mercurial codeblocks

我想知道是否有办法将Mercurial标签嵌入到我的C / C ++代码中。

基本上我希望标签字符串最终成为一个版本号(major.minor.rev),自动插入我的C代码的确定位置作为静态字符串。

总体目标是,在使用'-v'命令行参数执行时,可以查询应用程序的版本号。任何不涉及尝试嵌入Mercurial标签的替代方法也将作为答案受到欢迎。

我在Linux环境中使用Code :: Blocks,因此解决方案不能依赖Visual Studio功能。

2 个答案:

答案 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;
}