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

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

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

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

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

您将需要关键字扩展以允许扩展关键字条目,它与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 。

我们为此使用宏

 #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; }