如何将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; }