Итак, у меня есть следующие настройки (упрощенная версия):
application/app1.hpp
application/app1.cpp
application/utils/utils1.hpp
application/utils/utils1.cpp
Поэтому, когда я компилирую app1.cpp, я делаю так (это урезанная версия компиляции):
g++ -Wall -Wextra -Werror -I application -isystem application/utils -MMD -MP -MF dep.d -c application/app1.cpp -o obj.o
Где я использую -MDD для автоматической генерации информации о зависимостях. Я использую -isystem, чтобы запретить предупреждения из файлов в папке utils.
Примечание: utils
- это субмодуль (то есть отдельный проект, который компилируется самостоятельно). Поэтому я не хочу компилировать предупреждения / ошибки из этого проекта. Поэтому я использую -isystem application/utils
для включения папок. Когда вы используете isystem, вы не получаете предупреждений gcc - это здорово:)
Однако я только что обнаружил, что это также причина того, что я не получаю полные выходные данные зависимости. Файлы, включенные в каталоги isystem
, не добавляются в качестве зависимостей в файл dep.d, сгенерированный gcc.
Так что, похоже, я могу либо проигнорировать предупреждения от утилит, но не получить для него генерацию зависимости, ИЛИ я могу получить вывод зависимости, но не проигнорировать предупреждения.
Я действительно хочу оба:
- Нет предупреждений от утилиты
- Зависимости из папки utils (через gcc -MMD)
Возможно ли как-то получить оба поведения?
Некоторые мои идеи:
- Я думал о том, чтобы как-то сначала запустить компонент препроцессора зависимостей, а затем компилировать ... но я не видел способа сделать это
- Принудительно включать папки в часть MMD. Я обнаружил, что могу включать определенные файлы с
-include
, но не с папками, и у меня нет списка файлов: (