2012-08-27 73 views
0

我希望爲我的(C++)項目的版本信息分配一個內部版本號。我希望g ++或Eclipse調用一些外部腳本,這些腳本會在BUILD_NUMBER中碰撞(或者,如果我選擇讓它在發佈時固定),然後在我的代碼中調用BUILD_NUMBER作爲#defined值。這可能嗎?我會怎麼做?請注意,我希望這個值可能更受限制,可能是一個C++變量。在我們聲明構建版本是beta版本之前,它將是一個變量。然後它會鎖定。如何在eclipse中使用環境變量作爲#define

作爲替代,我可以使用SVN版本號。它可用於Eclipse以將其填充到環境var或#define-d值中?

我已經看了看周圍的谷歌和在Eclipse論壇,並找到許多條目共享相同的搜索詞,我會用這個問題。話題沒有出現在話題上。

回答

3

Eclipse中調用你的makefile,通常默認的「所有」目標(您可以更改項目的目標>屬性> C++編譯>行爲>工作臺構建行爲。)

因爲你的問題不作提到你的makefile,這可能是問題的關鍵:你需要向你的makefile添加代碼,以確保在調用g ++之前生成編號頭(將被創建)。

如果您不熟悉GNU'make',那麼您應該從此開始。至於正從Subversion的當前轉速,可以在bash腳本這樣做或做食譜:

echo "#define SVN_REV=$(svn info | grep 'Last Changed Rev:' | cut -c 17)" > my_version_header.h 

該命令首次運行「SVN信息」,選擇最近修改的修訂線,剪掉的開始行,並將結果寫入C頭文件。

+0

非常優雅的解決方案。但是,我在svn commit之前和之後嘗試過,在報告的版本中沒有chnage。請在下面看到我自己的回答,以瞭解我找到的另一個解決方案 - 當然我問了這個問題。 –

+0

svn如何知道我在Eclipse中打開了哪個項目? Project Explorer中列出了1個以上。因爲(我認爲)它運行在eclipse正在運行的shell的子shell中,啓動程序是否將svn項目id向前複製到子shell中? –

+0

Svn對Eclipse沒有任何瞭解。當Eclipse調用您的makefile時,它通常會在項目目錄中執行(除非您在某個子節點中進行構建)。如果您在項目目錄中運行'svn info',svn會獲取當前目錄以確定要檢索的信息。關於您在其他地方描述的以Eclipse爲中心的解決方案,我唯一的反對意見是您將Eclipse與您的構建過程耦合在一起......即,您喪失了從命令行正確構建的能力,是的? – Stabledog

1

您可以使用$Revision$ Subversion keyword(並適當設置svn:關鍵字)來獲取插入/更新的文件的上次更改的修訂版。

但是,如果您想要整個「項目」(目錄)的版本號,則需要按照here in the FAQ所述進行操作。