Я думаю, что это вопрос, который задавался много раз, но я не могу найти правильный правильный способ сделать это.
У меня есть следующая структура:
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'. И для этого я прошу вашей помощи ... Спасибо.
Самый простой способ - это сделать:
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
Попробуйте поместить это правило в файл проекта / Makefile примерно так (для GNU make):
.PHONY: project_code project_code: cd code && make