Подкаталоги и Makefiles - PullRequest
       14

Подкаталоги и Makefiles

57 голосов
/ 16 августа 2010

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

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

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' будет содержать другие правила (например, 'install') и некоторые правила для компиляции, как если бы я был в 'project/код'.И для этого я прошу вашей помощи ... Спасибо.

Ответы [ 2 ]

81 голосов
/ 16 августа 2010

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

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
1 голос
/ 16 августа 2010

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

.PHONY: project_code
project_code:
       cd code && make
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...