2013-04-04 26 views
3

我讀過太多的文章談論顛覆關鍵字和許多其他細節,如錨點和錨點標誌,但他們都沒有談論c + +。如何閱讀和通過我的c + +代碼svn版本

我正在使用QT創建器,我希望C++讀取svn版本並將其作爲值或字符串(或任何數據類型)傳遞給我的代碼。

那麼,我該怎麼做呢?

+0

你的意思是char * my_rev = $ Revision $; – user1810087 2013-04-04 15:52:54

+0

您可以將svn prop添加到文件中。然後讓ID,作者......在每個文件的頂部。 svn會正確更新它們。然後用C++打開文件並閱讀。 – 2013-04-04 15:53:04

+0

你需要和svn一起工作,還是隻是想在你的程序幫助中向你展示svn版本? – Amartel 2013-04-04 15:54:47

回答

2

SVNBook文本可能是與此有關:

新用戶往往是由$ $修訂關鍵字是如何工作的混淆。由於 存儲庫具有單一的全球增加的修訂版本號,因此許多人認爲此數字反映在$ Rev $ 關鍵字的值中。但$ Rev $展開後顯示文件最後修訂版 已更改,而不是最新修訂版。 瞭解這一點可以消除混淆,但通常情況下 仍然存在 - 如果沒有Subversion關鍵字的支持, 會自動將全局修訂號碼導入到您的文件中?

要做到這一點,您需要外部處理。 Subversion附帶一個叫做svnversion的工具 ,它是專爲此目的而設計的。它抓取您的工作副本 並生成它找到的修訂的輸出。 您可以使用此程序以及一些附加工具將 版本信息嵌入到您的文件中。有關 svnversion的更多信息,請參閱「svnversion」一節。

在我的項目,我們結束了不使用svnversion,主要是因爲我們的source tree is huge和該命令似乎採取過多的時間量。但是,我們的確得到了類似的東西,可以將修訂號碼導入我們的軟件。該configure腳本執行以下命令

svn info . > svn_revision 

這是假設的命令是從哪兒是從SVN庫中檢出了一個目錄執行。爲了解析這些數據,我有裏grep各種串到常量

SVN_REV = $(shell cat svn_revision | grep "Last Changed Rev" | cut -f4 -d\)            

這是通過一個模板文件我稱之爲version.cc.template喂Makefile中,有一個Makefile規則,把它變成一個.cc文件

version.cc: version.cc.template /svn_revision 
     sed -e "s/REVISION/$(SVN_REV)/" version.cc.template > [email protected]          

所以我結束了這樣的事情

version.h中

namespace project { 

extern const char* Revision; 
extern const unsigned int SvnRevision; 

} 

version.cc

namespace project { 

const char* Revision = "1234"; 
const unsigned int SvnRevision = 1234; 

} 

可能無法在您情況下所需的文件version.cc,常數可以在報頭中被定義爲好。

2

How to get the output of system() command qt c++?

像接受的答案說,你可以運行通過系統終端使用QProcess中的命令,等待它完成,然後得到命令的文本。

+0

感謝您的回覆。其實我現在可以將'svn --version' commnad寫入一個文件。然而,我不需要這個命令,我需要'svn info'命令,只將字符串「exported」寫入到.txt文件中。現在的問題是,我無法說明'svn info'命令可以執行的工作副本 – 2013-04-05 13:46:47

+0

http://qt-project.org/doc/qt-4.8/qprocess.html#setWorkingDirectory使用此函數來設置您要運行QProcess命令的目錄。那麼你的'svn info'應該可以工作。 – phyatt 2013-04-05 16:31:01