Один из популярных способов организации каталогов проектов более или менее похож на этот:
MyLib
+--mylib_class_a.h
mylib_class_a.cpp
mylib_library_private_helpers.h
mylib_library_private_helpers.cpp
MyApp
+--other_class.h
other_class.cpp
app.cpp
app.cpp
:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Все файлы .h
и .cpp
для одной библиотеки находятся в одном каталоге. Чтобы избежать конфликта имен, имена файлов часто имеют префикс с названием компании и / или именем библиотеки. MyLib будет в пути поиска заголовка MyApp и т. Д. Я не фанат префиксов имен файлов, но мне нравится идея взглянуть на #include
и точно знать, где находится этот заголовочный файл. Я не ненавижу такой подход к организации файлов, но я думаю, что должен быть лучший способ.
Поскольку я начинаю новый проект, я хочу запросить некоторые идеи организации каталогов. В настоящее время мне нравится эта структура каталогов:
ProjA
+--include
+--ProjA
+--mylib
+--class_a.h
+--app
+--other_class.h
+--src
+--mylib
+--class_a.cpp
library_private_helpers.h
library_private_helpers.cpp
+--app
+--other_class.cpp
app.cpp
util.h
app.cpp
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
файлы и личные (видимые только для непосредственной библиотеки) .h
файлы хранятся в каталоге src (src иногда называют lib). Открытые заголовочные файлы организованы в структуру каталогов project / lib и включены через <ProjectName/LibraryName/headerName.h>
. Имена файлов не имеют префикса с чем-либо. Если мне когда-нибудь понадобилось упаковать MyLib для использования другими командами, я мог бы просто изменить свой make-файл, чтобы скопировать соответствующие двоичные файлы и весь каталог include / ProjA.
Как только файлы будут проверены в системе контроля версий и люди начнут работать с ними, будет сложно изменить структуру каталогов. Лучше получить это прямо на старте.
Кто-нибудь с опытом организации подобного исходного кода? Что-нибудь тебе не нравится в этом? Если у вас есть лучший способ сделать это, я бы очень хотел услышать об этом.