Компилятор PGI
описывает '-MD':
-MD Создает список зависимостей make и печатает их в файл file.d, где file является корневым именем файла. в процессе компиляции.
Не предлагает никаких вариантов управления местоположением. Аналогично, GCC
:
-MD -MD эквивалентно файлу -M -MF, за исключением того, что -E не подразумевается. Драйвер определяет файл в зависимости от того, задана ли опция -o. Если это так, драйвер использует свой аргумент, но с суффиксом .d, в противном случае он берет имя входного файла, удаляет все компоненты каталога и суффикс и применяет суффикс .d.
На первый взгляд, две опции:
- В правиле "% .o" добавьте команду для 'mv' '.d', если она создана в SRC, в BUILD_PATH
- Добавьте явное правило с помощью '-M' и перенаправьте стандартный вывод в папку BUILD_PATH.
Я думаю, что # 1 проще:
$(BUILD_PATH)/%.o: $(SRC_PATH)/%.$(SRC_EXT)
@echo "Compiling: $< -> $@"
$(CXX) $(CPP_FLAGS) $(LFLAGS) -c $< -o $@ $(LIBS)
[ -f "${^D}/$*.d" ] && mv -f "${^D}/${*}.d" "${@D}/" || true
Не удалось протестировать с компилятором PGI (без PGIкомпилятор для меня), так что я надеюсь, что он на самом деле будет работать.