У меня есть большая база кода на C ++, и я думаю, что есть проблема с использованием заголовочных файлов.
Существует множество проектов Visual Studio, но проблема в концепции и не связана с VS. Каждый проект представляет собой модуль, выполняющий определенные функции. Каждый проект / модуль компилируется в библиотеку или двоичный файл. Каждый проект имеет каталог, содержащий все исходные файлы - * .cpp и * .h. Некоторые заголовочные файлы являются API модуля (я имею в виду подмножество заголовочных файлов, объявляющих API созданной библиотеки), некоторые являются внутренними для него.
Теперь к проблеме - когда модулю A нужно работать с модулем B, A добавляет исходный каталог B, чтобы включить путь поиска. Поэтому все внутренние заголовки модуля B видны A во время компиляции.
Как побочный эффект, разработчик не обязан концентрировать внимание на точном API каждого модуля, что я считаю вредной привычкой.
Я рассматриваю варианты, как это должно быть на первом месте. Я думал о создании в
каждый проект выделенный каталог, содержащий только заголовочные файлы интерфейса. Клиентский модуль, желающий использовать модуль, может включать только интерфейсный каталог.
Этот подход в порядке? Как решается проблема у вас?
UPD На моем предыдущем месте разработка была сделана для Linux с использованием g ++ / gmake, и мы действительно использовали для установки заголовочных файлов API в общий каталог, как предлагают некоторые ответы. Теперь у нас есть проект Windows (Visual Studio) / Linux (g ++), использующий cmake для генерации файлов проекта. Как принудительно выполнить предварительную сборку заголовочных файлов API в Visual Studio?
Спасибо
Дмитрий