Пост RC был СУПЕР полезен. Я никогда не думал об использовании функции $ (dir $ @), но она сделала именно то, что мне было нужно.
В parentDir есть несколько каталогов с исходными файлами: dirA, dirB, dirC. Различные файлы зависят от объектных файлов в других каталогах, поэтому я хотел иметь возможность создать один файл из одного каталога и заставить его создать эту зависимость, вызвав make-файл, связанный с этой зависимостью.
По сути, я создал один Makefile в parentDir, который имел (среди многих других) общее правило, похожее на RC:
%.o : %.cpp
@mkdir -p $(dir $@)
@echo "============="
@echo "Compiling $<"
@$(CC) $(CFLAGS) -c $< -o $@
Каждый подкаталог включал этот make-файл верхнего уровня, чтобы наследовать это общее правило. В Makefile каждого подкаталога я написал собственное правило для каждого файла, чтобы я мог отслеживать все, от чего зависел каждый отдельный файл.
Всякий раз, когда мне нужно было создать файл, я использовал (по существу) это правило для рекурсивного создания любых / всех зависимостей. Отлично!
ПРИМЕЧАНИЕ: есть утилита под названием «makepp», которая, кажется, выполняет эту задачу еще более интуитивно, но ради переносимости, а не в зависимости от другого инструмента, я решила сделать это таким образом.
Надеюсь, это поможет!