8

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

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

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

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

4

2 回答 2

6

您将需要关键字扩展来允许扩展关键字条目,它与 mercurial 捆绑在一起。

例如,为了获得对您的支持,$Id$您可以为您的 repo ( .hg/hgrc) 编辑 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}

注意:这会禁用内置关键字

更多关于扩展的细节可以在 wiki中找到。

于 2010-02-12T18:41:36.400 回答
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;
}
于 2010-02-12T18:15:10.513 回答