Подкаталоги и Make файлы

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

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

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

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

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

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

Ответ 1

Самый простой способ:

CODE_DIR = code

.PHONY: project_code

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

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

Например:

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

Ответ 2

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

.PHONY: project_code
project_code:
       cd code && make