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

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

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

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 / code'. И для этого я прошу вашей помощи ... Спасибо.

57
задан dmckee 16 August 2010 в 16:30
поделиться

2 ответа

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

CODE_DIR = code

.PHONY: project_code

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

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

Например:

clean:
       $(MAKE) -C $(CODE_DIR) clean
81
ответ дан 24 November 2019 в 19:40
поделиться

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

.PHONY: project_code
project_code:
       cd code && make
1
ответ дан 24 November 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: