2012-01-13 57 views
0

可能重复:
How do I embed Mercurial tags into my C/C++ code?写作版本信息为注释块

我可以添加版本控制信息从水银进入第一个注释块在.c和.h文件的回购正在追踪?

我相信它会涉及添加一些东西到Makefile文件,以便在源文件中注释行被取代为最新版本信息

我已经尽量了在使用#define通过从每个编译编译器(如GCC-D),并增加了以下我的Makefile:

HGVERSION:= $(shell hg parents --template 'hgid: {node|short}') 
CFLAGS += -g -Wall -DHGVERSION="\"${HGVERSION}\"" 

不过虽然这使得现有的预处理器变量给我,我不知道这有助于将一些文本注释块。

为了详细说明,我可以看到如何使用HGVERSION来实现一个标志来获得exe来打印它的版本信息,但我看不到如何将该信息放入源的实际文本中文件

详细说明,我可以看到我可以如何使用HGVERSION来实现某种程序版本信息,例如用-ver标志或类似的东西运行exe文件时打印版本,但不是如何以某种方式将该信息导入实际的源文件文本

我想最终得到类似于我的每一个src文件的顶部:

/* some comments 
* 
* version x.y.z 
*/ 

我是在正确的轨道上还是在这里需要的其他技术?

+0

我不确定它是一个确切的副本(我在我的研究中发现了与Mercurial wiki相同的链接)。我试图将它写入源文件中的注释块,而不是以编程方式使用它,即不是作为C语句中使用的#define值。 – bph 2012-01-13 12:00:01

+2

检查[Keyword](http://mercurial.selenic.com/wiki/KeywordExtension)扩展名。但也读[为什么你不需要它](http://mercurial.selenic.com/wiki/KeywordPlan#head-2007fad6f31bf6f1f1b5c3d5b02e5c6225de3ec5)。 – 2012-01-13 12:08:19

+1

@JoachimPileborg我一直认为,直到昨天,当我意识到我们可能有一个用例,其中一个客户在任何克隆回购之外获得一些头文件(他们只是得到一堆文件),因为它们没有被重新编译或做任何事情发展。在这种情况下,它将会有用(作为腰带和大括号的方法),以便能够将他们所拥有的文件链接到我们的回购中的更新。当然,我们应该记录下我们的运送时间和时间,但正如我所说的那样,皮带和大括号 – bph 2012-01-13 12:16:29

回答

1

可以用简单的sedawk脚本完成。
开始每个文件的东西与众不同,如:

/* 
* MERCURIAL VERSIONS HERE: 
*/ 

然后写一个脚本,这只是这行后添加* version $HGVERSION
以下awk脚本应该这样做:

awk -vHGVER=$HGVERSION '{print $0} /^ \* MERCURIAL VERSIONS HERE:$/ { print ' * ' HGVER}' 

你什么时候运行?
如果将它添加到生成文件,它将在您每次编译时运行。如果您添加一些代码以防止两次添加相同版本(grep -v ... && awk ...),则可以。