Вот трюк, который я использую с GNU make для создания каталогов вывода компилятора. Сначала определите это правило:
%/.d:
mkdir -p $(@D)
touch $@
Затем сделайте все файлы, которые идут в каталог, зависимыми от файла .d в этом каталоге:
obj/%.o: %.c obj/.d
$(CC) $(CFLAGS) -c -o $@ $<
Обратите внимание на использование $ <вместо $ ^. </p>
Наконец, запретите удаление файлов .d автоматически:
.PRECIOUS: %/.d
Пропуск файла .d, зависящий непосредственно от каталога, не будет работать, поскольку время изменения каталога обновляется каждый раз, когда файл записывается в этот каталог, что приведет к перестройке при каждом вызове make.