Для научного проекта у меня есть инструмент шаблонного анализа (модуль A), который использует тип статистического теста (модуль B). Инструмент анализа (модуль A) используется для решения двух типов задач (модули C и D). Модули C и D определяют функции для сериализации из разных типов файлов.
Все модули (A, B, C и D) используют общие утилиты (модуль E). Каждый модуль состоит из нескольких файлов. Я действительно хотел бы организовать модули так, чтобы у каждого было свое собственное пространство имен, и чтобы исходные файлы находились в разных каталогах (т.е. подчеркивали модульность в организации).
Тривиально определить пространство имен в каждом файле. Но я надеялся использовать какое-то дерево исходников, где файл #include для каждого модуля будет включать все остальные в своем собственном пространстве имен.
Я не совсем уверен, что это хороший способ организовать это. Должен ли я просто использовать одну папку на модуль и #include, используя относительные пути? Если каждый модуль имеет свой собственный репозиторий git и компилируется в один файл библиотеки, который находится в указанной папке UNIX (это потребует истинной установки для запуска проекта).
Сейчас я использую gcc-4.7, make и emacs.
Знаете ли вы, как организовать эти файлы, чтобы выявить модульность?
Пожалуйста, простите меня и предложите, если есть какой-то другой филиал StackOverflow, который больше подходит для этого вопроса. Мой проект запускается, но это намного больше беспорядка, чем нужно!
Но я надеялся использовать какое-то дерево исходников, где файл #include для каждого модуля будет включать все остальные в своем собственном пространстве имен.
Это неправильный подход. Даже если A зависит от E на уровне модуля, это не обязательно означает, что все компоненты внутри A зависят от всех компонентов внутри E, и вам не следует форсировать это через включения.
Включения должны быть явными (включать все, что вам действительно нужно) и точными (не включать ничего, от чего вы не зависите).
При этом, я бы организовал код в модулях, где каждый модуль имеет отдельный каталог. Если модуль становится достаточно сложным, чтобы требовать разделения на подмодули, тогда вы можете добавить вложенные каталоги, но одной двухуровневой иерархии может быть достаточно.
Других решений пока нет …