2013-04-22 63 views
6

我的源文件窗格正在快速增長(就我項目中的文件數而言),並且快速找到我需要訪問的特定源文件有點麻煩給定的時間。我正在使用Embarcadero的C++ Builder,但我也在其他C++ IDE中遇到過這個問題。如何在C++中以邏輯方式組織源文件

在Java中,我經常利用軟件包來創建我的源代碼的邏輯分區,特別是在處理單個項目中的大量源文件時。雖然這當然不是Java包的唯一目的,但在這方面它們非常方便。

有沒有人有關於如何在C++中實現類似功能的任何想法?我應該將源文件分成物理文件夾嗎? C++ Builder是否提供某種虛擬文件夾/分組功能,我只是沒有看到?任何想法都表示感謝,並感謝你。

+1

我通常會瀏覽類瀏覽器,而不是依賴源文件組織。 – 2013-04-22 04:26:09

+2

組織到文件夾中。如果它的大模塊,我會建議讓它成爲一個項目 – 2013-04-22 04:32:04

+1

Jeezo我是個錯誤的人問。我對組織很冷淡,我的IDE很少打開三個以上的源文件,而且如果事情開始變得毛茸茸的話,我的項目總是會設置一個帶有src /特性的src /文件夾(這是他們很少做的事情,因爲我是不是一個大膽的倡導者)。另外一個項目包括/文件夾的交叉功能包括。 – WhozCraig 2013-04-22 05:46:20

回答

6

我通常推薦使用而不是,以便僅使用IDE或語言語法來組織源代碼。首先,你扎自己的環境:在IDE良好的組織,沒有組織上的文件,然後來的時候,你可能需要使用一個不同環境的一天......

正因爲如此,我通常使用所有三種同時組織源代碼的方式:將源代碼分離爲功能模塊,即相關類。每個模塊都有自己的命名空間,物理文件夾和IDE文件夾。 (在我的情況下,如果需要,使用CMake和​​來生成IDE項目文件 - 個人更喜歡命令行,Vim和「make」)。

因此,無論我從IDE中查看項目,命令行或編譯器日誌,foo/bar.cpp是foo/bar.cpp是foo :: bar,最大限度地減少了混淆。

事實上,我目前首選的設置進一步細分每個模塊目錄放到取決於類是否使用自己的模塊或沒有,<module>/src/<Class>.cpp<module>/test/<Class>Tu.cpp<module>/<Class>.hpp<module>/src/<Class>.hpp。命名空間當然是<module>::<Class>

但最後,它非常依賴於你的品味,你的共同開發者的素質和你的項目的範圍。

+0

這看起來似乎是全能的最佳解決方案。特別是如果我的項目將來會遷移到不同的IDE,並且它會在各個方面覆蓋我。感謝您的有用答案。 – 2013-04-22 16:44:03

0

我製作項目是爲了讓我的所有文件都能輕鬆訪問。這是最簡單的組織方式,以及清晰的類/文件名。

+4

我實際上(在我的第一句話中)指出了我正在處理的是__is__項目。我的問題是在該項目中組織源文件。在處理相對較多的課程時,只給他們明確的名字是不夠的。 – 2013-04-22 16:28:56

10

這是我的滾:

PROJECT_NAME 
|-- build // This is DVCS ignored but has all the built intermediates and final binaries 
| |-- release // These are the different build profiles 
| |-- debug 
| |-- profile 
| `-- coverage 
|-- bin // For binary source code 
| `-- hello_world 
|  |-- doc 
|  |-- inc 
|  |-- src 
|  |-- tests 
|  `-- build_script // Builds binary into the build folder 
|-- include // Public headers for the library 
| `-- these 
|  `-- folders 
|   `-- represent 
|    `-- namespaces 
|     `-- my_awesome_class.hpp 
|-- lib // library source code 
| |-- these 
| | `-- folders 
| |  `-- represent 
| |   `-- namespaces 
| |    |-- inc // Private headers 
| |    | `-- my_private_class.hpp // internal class 
| |    |-- src // Source code for this namespace 
| |    | |-- posix 
| |    | | `-- my_awesome_class.cpp // posix specific source code 
| |    | |-- nt 
| |    | | `-- my_awesome_class.cpp // nt specific source code 
| |    | |-- my_private_class.cpp // non-visibile class 
| |    | `-- my_awesome_class.cpp // cross platform source code 
| |    |-- tests // Unit tests 
| |    | `-- my_awesome_class.cpp // builds a test executable for the library 
| |    `-- doc // Documentation for this namespace 
| |     `-- namespace.dox 
| `-- build_script // Builds binary into the build folder 
|-- doc // Documentation files 
| |-- main_page.dox 
| `-- namespace.dox 
`-- build_script // Builds the source code into the build folder 

這代表these::folders::represent::namespaces::MyAwesomeClass類具有posixNT特定的源代碼(以及通用源代碼)加有是在內部使用的私人these::folders::represent::namespaces::MyPrivateClass圖書館,標題不是公開的,並且類標誌的visibility被隱藏。

這已經很好地擴展了,並提供了文件的輕鬆定位。

+0

出源構建也相當整齊。我建議刪除'build'目錄並從'../ build_whatever_mode'構建。 – Offirmo 2013-04-22 16:45:10