C ++ Builder — Как логически организовать исходные файлы в Stack Overflow

Моя панель исходных файлов быстро растет (с точки зрения количества файлов в моем проекте), и становится немного громоздким, чтобы быстро найти конкретный исходный файл, к которому мне нужно получить доступ в любой момент времени. Я использую Embarcadero C ++ Builder, но я столкнулся с этой проблемой и в других C ++ IDE.

В Java я часто использую пакеты для создания логических разделов моего исходного кода, особенно когда имеешь дело с большим количеством исходных файлов в одном проекте. Хотя это, конечно, не единственная цель пакетов Java, они очень удобны в этом отношении.

У кого-нибудь есть идеи о том, как я могу достичь аналогичной функциональности в C ++? Должен ли я разделить мой источник на физические папки? Предлагает ли C ++ Builder какую-то функциональность виртуальных папок / групп, которую я просто не вижу? Любые идеи ценятся и спасибо.

8

Решение

Я вообще рекомендую не использовать (только) IDE или синтаксис языка для организации вашего исходного кода. Во-первых, вы привязываетесь к среде: хорошо организованы в IDE, неорганизованы в файле, а затем наступает день, когда вы можете захотеть использовать разные среда…

Поэтому я обычно использую все три способа организации своего источника одновременно: я делю свой источник на функциональные модули, то есть связанные классы. Каждый модуль получает свое собственное пространство имен, физическую папку и папку IDE. (В моем случае, используя CMake а также source_group() генерировать файлы проекта IDE, если необходимо — лично предпочитая командную строку, Vim и «make».)

Следовательно, независимо от того, смотрю ли я на проект из среды IDE, из командной строки или из журнала компилятора, foo / some_class.hpp — это foo / some_class.cpp — это foo :: some_class, сводя к минимуму путаницу вокруг.

На самом деле, моя предпочитаемая в настоящее время установка подразделяет каждый каталог модулей на <project>/<module>/<class>.hpp или же <project>/<module>/src/<class>.hpp в зависимости от того, используется ли класс вне его собственного модуля или нет, <project>/<module>/src/<class>.cpp, а также <project>/<module>/test/<class>_tu.cpp, Пространство имен <project>::<module>::<class>, конечно.

project
|-- foo
|   |-- some_class.hpp
|   |-- src
|   |   |-- internal_class.hpp
|   |   |-- internal_class.cpp
|   |   `-- some_class.cpp
|   `-- test
|       |-- internal_class_tu.cpp
|       `-- some_class_tu.cpp
|-- bar
|   |-- ...

Идея здесь заключается в том, что «внешний» интерфейс каждого модуля (foo) документируется заголовками в этой подпапке, детали реализации и тесты «скрыты» в соответствующих подпапках.

Но в конце концов, это очень сильно зависит от вашего вкуса, вкуса ваших со-разработчиков и масштаба вашего проекта.

9

Другие решения

Вот как я катаюсь:

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 класс, который имеет posix а также NT конкретный исходный код (а также общий исходный код) плюс есть частный these::folders::represent::namespaces::MyPrivateClass который используется внутри библиотеки, заголовки не являются публичными и видимость Символы класса скрыты.

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

10

Я делаю проекты, чтобы все мои файлы были легко доступны. Это самый простой способ организации, наряду с четкими именами классов / файлов.

0
По вопросам рекламы [email protected]