2012-01-13 105 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 ...),則可以。