2010-01-07 83 views
2

假設您在單獨的存儲庫或同一個存儲庫中的頂級目錄中有多個定製的C++項目。也許10是庫的項目,如圖形,數據庫,數學等的東西,2是使用這些庫的實際應用程序。在幾個C++項目的代碼庫中組織.libs

組織這兩個應用程序項目以獲得他們需要的.libs的最佳方式是什麼?

  • 每個LIB項目構建的.lib在自己的目錄,開發人員必須跨越手動複製這些到應用領域,並確保獲得正確的版本
  • 應用項目預期的lib項目是在特定的路徑和尋找的.libs
  • 常見的/ libs目錄中所使用的所有項目
  • 別的東西

這是專注於C++,但我認爲這是非常SI那些位置內與其他語言類似,例如在Java項目中組織JAR。

回答

1

我建議這種方法:

在根文件夾中組織您的代碼。我們稱之爲代碼。

現在將您的項目和庫作爲子文件夾(例如項目和庫)。

像平常一樣構建庫,然後添加生成後步驟,將生成的頭文件和.lib文件複製到一組共享文件夾中。例如,Libraries \ include和Libraries \ lib。使用子文件夾或命名約定(myLib.lib,myLib_d.lib)來區分不同的構建版本(例如調試版和發行版)是一個不錯的主意,這樣任何lib引用都明確地定位一個永遠不會混淆的單個文件。當你不小心鏈接到一個lib的錯誤變體時它會很糟糕!

您也可以將您使用的第三方庫複製到這些文件夾中。

注意:爲了保持它們的有序性,請使用#include「Math \ Utils.h」而不是「Utils.h」包含文件。並將整個數學庫的標題放入include \ Math,而不是全部放入include文件夾的根目錄。這樣你可以有很多沒有名字衝突的庫。它還可以讓您擁有不同版本的庫(例如Photoshop 7,Photoshop 8),它允許您在不同的運行時環境中多重定位您的代碼。

然後設置您的項目引用以下兩種方式之一的庫:

1)告訴你的IDE /編譯器,其中庫是利用其全球的lib/include路徑。這意味着您可以在每臺PC上設置一次IDE,而不必指定任何項目的庫位置。

2)或者,將每個項目設置爲使用它自己的lib/include路徑引用libs。這爲您提供了更大的靈活性,避免了設置每臺PC的需求,但意味着您必須在每個新項目中設置相同的路徑。

(哪一個是最好取決於項目與開發PC的數量數)

而且最重要的部分:當你引用包括/庫,使用相對路徑。例如從Projects \ WebApp \ WebApp.proj中,使用「.. \ ..\ Libraries \ include「而不是」C:\ Code \ Libraries \ Include「,這樣可以讓其他開發者和buildserver在其他地方(D:\ MyWork代替C:\ Code)如果你找到一個開發人員在C:\上沒有足夠的磁盤空間,或者你想分支你的源代碼控制,它會咬你一天。「

+0

*」當你引用includes/libs時,使用relative路徑「* ......傾向於將'../../ Libraries/Include'放入項目中包含目錄,而不是明確引用標頭,這樣可以避免在您決定移動包含時破壞代碼 – 2010-01-07 22:27:54

+0

當AppX使用DatabaseUtils的HEAD版本,但是AppY不能在同一個項目的r1234之後的任何修訂版本上工作嗎?當我想將boost1.2.3和boost1.2.4作爲單獨的項目說出時,您的解決方案就可以正常工作 - 它們會像這樣釋放它們。通常是一個用戶lity項目仍在開發中,新的更改會破壞舊應用程序的功能。 – 2010-01-07 22:35:37

+0

@gf:我的意思是說./../Libraries/Include在你的INCLUDE_PATH中,但是你的#include將使用不同庫的子文件夾,即#include「Math \ Utils.h」。否則,你必須在一個文件夾中放置一百萬個頭文件,並且最終會產生許多帶有名稱衝突的文件(比如每個庫中用於不同的東西的「types.h」) – 2010-01-08 07:48:54