Организация C ++ в файловой системе - PullRequest
0 голосов
/ 18 сентября 2011

Я пришел из фона Java / AS3 / Javascript, где все мои классы организованы в пакеты, которые помогают обозначить их функциональность.

При запуске проекта на C ++ я стремился имитировать структуру этой файловой системы почти таким же образом, но у меня возникали проблемы с включениями.

В настоящее время у меня есть каталог src с файлом main.cpp внутри. Тогда у меня есть несколько корневых каталогов и с другими файлами внутри. Вот пример:

1007 * ЦСИ *

-> main.cpp

-> окно

----> window.h

----> window.cpp

main.cpp включает Window.h с оператором #include "Window.h", и все собирается просто отлично. Но если я перезапускаю Visual Studio, он жалуется, что не может найти "Window.h".

При просмотре проектов с открытым исходным кодом, я видел некоторые, в которых все исходные файлы просто находятся в одном каталоге без вложений для простых включений, я полагаю. В некоторых заголовки и файлы cpp разделены.

Каков правильный способ (или, по крайней мере, способ, который вызовет меньше головной боли) для организации проекта C ++ большого размера в файловой системе?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

Разбить его, как вы пытались сделать, разумно и достаточно просто.

Вам просто нужно указать пути включения вашего проекта. В Visual Studio щелкните правой кнопкой мыши имя проекта и выберите «Свойства». Оттуда, в древовидном элементе управления слева, разверните «C / C ++», а затем выберите «Общие» в дереве. Первый вариант справа должен быть «Дополнительные каталоги включения».

Там у вас есть несколько вариантов:

Вы можете указать конкретные каталоги включения (разделенные точкой с запятой). Например, если у вас есть папки «Окно» и «Печать», вы можете добавить:

..\Window;..\Printing

Что позволит вам легко включать файлы из окна и печатать, например:

#include <Window.h>     // from src/window
#include <Printing.h>   // from src/printing

Приведенный выше подход имеет некоторые недостатки, поскольку вы можете легко сталкиваться с именами из других библиотек, которые вы можете использовать, что делает включение ORDER очень важным.

Лучшим подходом (на мой взгляд) является добавление следующего в качестве пути включения:

..\

Это заставит искать родительский каталог при поиске включений. Это позволяет вам быть более многословным в ваших путях включения, например:

#include <Window/Window.h>     // it's more clear where these are coming from
#include <Printing/Printing.h> // and much less likely to collide with other library
                               // header files
0 голосов
/ 18 сентября 2011

Имеет смысл последовать примеру Java и упорядочить исходные файлы по пространству имен C ++.Создайте в папке /src подпапки, соответствующие пространствам имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...