2011-09-09 9 views
1

當您設置一個項目以C++進行編譯時,無論是VS還是make,設置用於第三方庫的包含路徑的環境變量的最佳做法是什麼?你在變量中包含版本號嗎?即 THIRD_PARTY_LIB_3_1_1 = C:\庫\第三方\ 3.1.1將版本信息放入包含第三方庫路徑的環境變量是否很好?

,然後有$(THIRD_PARTY_LIB_3_1_1)\包括在include路徑

或 THIRD_PARTY_LIB = C:\庫\第三方\ 3.1.1 然後在你的包含路徑中包含$(THIRD_PARTY_LIB)\ include

擁有版本號的好處是你知道你應該指向哪個版本,不利的一面是當你改變版本時,你必須更新所有的項目/製作文件。

我在環境變量中沒有版本號時看到的主要問題是它不是顯式的,並且如果您有兩個使用不同版本的項目,它將成爲維護噩夢並且重建構建幾乎是不可能的。

回答

2

這取決於。

你應該考慮構建系統如何使用這些信息來改變它的行爲。無論你是一個人還是另一個人,都不會採取任何不同的行動,那麼它只會爲自己做更多的工作(也可能是混亂)。

如果一個版本需要包含相同的THIRD_PARTY_LIBRARY的多個版本,那麼你將不得不區分。否則,當您的項目特定代碼指定路徑時,應該足夠清楚。

具有版本號的好處是,你知道你應該是指向什麼 版,一面是,當 你改變的版本,你需要更新你所有的項目/製作 文件。

如果有人更改了路徑而不是變量名,路徑或變量名是否正確?這是一種愚蠢的想法,不是嗎?當別人不改變變量名稱,並且你試圖弄清楚爲什麼某些事情正在破裂時,你也會後悔的。

主要的問題我在 環境變量沒有版本號看到的是,它不是明確的,如果你有使用不同版本的2個 項目,就變成了維護 噩夢重現構建幾乎是不可能的。

構建文件和第三方庫應該在源代碼管理中。在構建發佈版本時,您的構建系統應記錄所有這些內容。通常,您希望構建系統能夠完整地檢查代碼庫以確保構建是正確的。作爲一個副作用,它也應該知道修訂號。

我的經驗是,環境變量依賴於問題,越來越具體。很多時候你需要他們,所以我不能也不會告訴你使用它們是錯誤的。儘管如此,您只能擁有一個頂級源路徑環境變量。如果您的構建系統可以使用基於此的路徑,那只是一個地方,它會失敗。如果每個圖書館都有一個圖書館,則會增加失敗點。

+0

環境變量的選擇是否會是?硬編碼庫和包含文件路徑的問題是,如果您進行了更改,則必須通過所有項目來更改設置。 – bpeikes

+0

@bpeikes使用相對路徑是一種選擇。具有* project *特定的硬編碼路徑是可以的。不同的人在不同的機器上不應該混淆這些東西。我更喜歡使用CMake來解決這個問題,它簡化了很多事情。使用CMake,如果你需要環境變量,它們在配置時呈現,而不是每個構建。這使您可以在同一個系統上擁有兩個工作版本的項目。 –

相關問題