我貢獻了一個decent-sized C++ project與一些依賴關係。問題是,該項目包含其所有依賴項的來源(例如pcre,zlib等)。我想將項目調整到與程序本身相關的內容。有沒有一些相對標準的方法來編譯這些庫並將它們放在某個地方,並且還可以輕鬆訪問它們的頭文件?我應該在哪裏放第三方庫?
對於它的價值,我使用的是Windows 7,而我正在使用VS2005進行開發。我也是一個在Windows上處理大型C++項目的完整noob;我從來沒有真正需要走出標準庫和win32。
我貢獻了一個decent-sized C++ project與一些依賴關係。問題是,該項目包含其所有依賴項的來源(例如pcre,zlib等)。我想將項目調整到與程序本身相關的內容。有沒有一些相對標準的方法來編譯這些庫並將它們放在某個地方,並且還可以輕鬆訪問它們的頭文件?我應該在哪裏放第三方庫?
對於它的價值,我使用的是Windows 7,而我正在使用VS2005進行開發。我也是一個在Windows上處理大型C++項目的完整noob;我從來沒有真正需要走出標準庫和win32。
,我們用我的工作場所是有一個包含「包含」和「庫」爲標題和外部libs文件夾一個「外部」的文件夾的結構。但是,由於我們也使用VS,我們儘量使用其「依賴關係」功能,刪除手動輸入到鏈接器。這意味着只有不屬於同一解決方案的項目纔會進入「外部」文件夾。另外,由於我們有一些特定於某些項目的第三方庫,因此我們在項目文件夾內爲這些includes和libs創建了文件夾。這是如何獲得:
.\ |-Project1\ --> contains Project1.vcproj |-Project2\ --> contains Project2.vcproj | |-Third-Party\ | |-Include\ | |-Lib\ |-External\ | |-Include\ | |-Lib\ |-InternalLibrary\ --> contains InternalLibrary.vcproj |-Solution.sln --> includes the vcproj's and link them as necessary by its dependencies
我不能說,如果這是有史以來最好的結構,但一切都源代碼控制之下,我們可以做夜間構建只需構建解決方案,並研製出通過建立單一項目。
你的陳述中有一個謬誤:「我想將項目調整到與程序本身相關的部分。」
相信我,依賴與程序非常相關。如果您在源代碼管理中沒有這些功能,那麼在引入新團隊成員或切換到新工作站時,您將遇到無盡的問題。
即使編譯「不相關的」庫,這些編譯的庫也應該放到源代碼庫中。
好的......我應該說「應用程序特定的代碼」。不過,我明白你的觀點。但是,構建這個最好的方法是什麼?現在,這一切都在一個單一的項目。我應該在一個解決方案中將它分解成單獨的項目,還是有更好的方法?我真的不知道最佳做法是在這裏,我找不到任何與谷歌。 – Twisol 2010-08-31 01:48:32
我並不完全同意這一點。一旦外部編譯完成,Boost安裝大約5GB(如果您需要支持VS2010和VS2008,則需要10 GB)。在源代碼控制下這是不合理的。 – 2010-08-31 03:03:41
我見過羣體做到以下幾點:從外部代碼(代碼他們提出VS外部公司)
項目存在於每個exe或庫的exe目錄下。
解決方案存在於團隊認爲有益的任何地方,並且二進制文件經常被鏈接,而不是包含在子解決方案中的項目。只有完整的構建才能保證不會在新入伍中突圍。
買者自負......
此評論不會有幫助,所以我不會將其作爲答案。 Linux/etc有更多的想法。有src,lib,bin,include和其他標準目錄名稱。當你在Windows下編寫一個庫時,你可以將庫的頭文件,源文件等放在任何你想放置它們的地方,並且期望這個世界符合你。您提到的一些庫在Linux下可用,因此可能使用標準目錄模式 – 2010-08-31 01:47:11
嗯......那是個很好的觀點。我想象編譯的庫進入lib和/或bin(取決於DLL/LIB-ness),並且應用程序代碼進入src?我喜歡。 – Twisol 2010-08-31 01:57:06
@Merlyn:我發現Linux有標準的地方放置C庫和包含文件,但沒有存儲*二進制文件的標準位置。爾加! +1發表評論。 – 2010-08-31 03:02:30