Поддиректории и файлы Makefile


Я думаю, что этот вопрос задавали много раз, но я не могу найти право способ сделать это.

У меня есть следующая структура:

project/
project/Makefile
project/code
project/code/*.cc
project/code/Makefile

когда я нахожусь в каталоге 'project/code' и вызываю "make project_code", мой код компилируется правильно.

Я хотел бы сделать это, когда я нахожусь в 'project/', просто вызывая "make project_code", как если бы я был в 'project/code'.

makefile 'project / Makefile' будет содержать другие правила (например, "установить") и некоторые правила для компиляции, как если бы я был в "проекте/коде". А для этого я прошу вашей помощи... Спасибо.

2 55

2 ответа:

самый простой способ это сделать:

CODE_DIR = code

.PHONY: project_code

project_code:
       $(MAKE) -C $(CODE_DIR)

The .PHONY правило означает, что project_code это не файл, который нужно построить, а -C флаг указывает на изменение каталога (эквивалентно запуску cd code перед вызовом make). Вы можете использовать тот же подход для вызова других целей в code Makefile.

например:

clean:
       $(MAKE) -C $(CODE_DIR) clean

Попробуйте поместить это правило в project / Makefile что-то вроде этого (для GNU make):

.PHONY: project_code
project_code:
       cd code && make