2009-09-09 53 views
60

我正在使用C++庫。最終,我想將其公開提供給多個平臺(至少Linux和Windows),以及一些示例和Python綁定。工作進展順利,但目前該項目相當混亂,完全依靠Visual C++而建立,而不是多平臺。C++庫的目錄結構

因此,我覺得一個清理是爲了。我想要改進的第一件事是項目的目錄結構。我想創建一個適合Automake工具的結構,以便在多個平臺上輕鬆編譯,但我以前從未使用過這些結構。由於我仍將在Visual Studio中完成(大部分)編碼,因此我需要在某處保留我的Visual Studio項目和解決方案文件。

我試圖谷歌的術語像「C++庫目錄結構」,但似乎沒有用。我發現了一些非常基本的指導方針,但沒有明確的解決方案

雖然看一些開源庫,我想出了以下內容:

\mylib 
    \mylib <source files, read somewhere to avoid 'src' directory> 
     \include? or just mix .cpp and .h 
    \bin <compiled examples, where to put the sources?> 
    \python <Python bindings stuff> 
    \lib <compiled library> 
    \projects <VC++ project files, .sln goes in project root?> 
    \include? 
    README 
    AUTHORS 
    ... 

我有一個多平臺開發/開源項目無/小以往的經驗和我相當驚訝,我找不到關於如何構建這樣一個項目的任何好的指導方針。

一般人應該如何構建這樣的圖書館項目?建議閱讀什麼?有一些很好的例子嗎?

+0

好像http://stackoverflow.com/questions/1383174/source-file-organisation/1383188#1383188 – 2009-09-09 10:18:44

回答

80

有一件事情是很常見的Unix圖書館之間是他們組織這樣的:

./   Makefile and configure scripts. 
./src  General sources 
./include Header files that expose the public interface and are to be installed 
./lib  Library build directory 
./bin  Tools build directory 
./tools Tools sources 
./test  Test suites that should be run during a `make test` 

它有點反映/usr下,傳統的Unix文件系統,其中:

/usr/src  Sometimes contains sources for installed programs 
/usr/include Default include directory 
/usr/lib  Standard library install path 
/usr/share/projectname Contains files specific to the project. 

當然,這些可能以/usr/local(這是GNU autoconf的默認安裝前綴)結束,它們可能根本不遵守這個結構。

沒有硬性規定。我個人不會這樣組織事情。 (除了最大的項目,我完全避免使用./src/目錄,例如,我也不使用自動工具,寧願使用CMake。)

我對你的建議是,你應該選擇一個目錄佈局,使感覺你(和你的團隊)。根據您選擇的開發環境,構建工具和源代碼控制進行最明智的操作。

+3

的重複使用CMake的,OUT-源代碼構建看起來很棒。 – Korchkidu 2012-03-09 10:14:46

5

我不認爲實際上有任何好的指導方針。大部分只是個人喜好。不過,某些IDE將爲您確定一個基本結構。例如,Visual Studio將創建一個單獨的bin文件夾,該文件夾分爲Debug和Release子文件夾。在VS中,當你使用不同的目標編譯代碼時,這是有意義的。 (調試模式,發佈模式)

正如greyfade所說,使用對您有意義的佈局。如果有人不喜歡它,他們將不得不自己重組它。幸運的是,大多數用戶會對你選擇的結構感到滿意。 (除非是真正的混亂。)

4

我覺得wxWidgets庫(開源)是一個很好的例子。它們支持許多不同的平臺(Win32,Mac OS X,Linux,FreeBSD,Solaris,WinCE ...)和編譯器(MSVC,GCC,CodeWarrior,Watcom等)。你可以看到樹佈局在這裏:

https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/