Рекурсивное использование make
Рекурсивное использование make означает использование make в качестве команды в файле make. Эта техника полезна, когда требуется отдельный файл make для различных подсистем, составляющих большую систему. Например, предположим, что у вас есть подкаталог subdir со своим файлом make, и вы хотите, чтобы файл make содержащего каталога выполнял make в подкаталоге. Вы можете сделать это, написав следующее:
subsystem:
cd subdir && $(MAKE)
или, что эквивалентно (см. Сводку опций):
subsystem:
$(MAKE) -C subdir
Вы можете писать рекурсивные make команды, просто скопировав этот пример, но существуют важные моменты, касающиеся их работы, и взаимосвязи под-make с основным make. Также может быть полезно объявлять цели, вызывающие рекурсивные make команды, как ‘.PHONY’ (подробнее о том, когда это полезно, см. Цели Phony).
Для удобства, когда GNU make запускается (после обработки всех -C опций), он устанавливает переменную CURDIR в путь текущей рабочей директории. Это значение больше никогда не будет изменено make: обратите особое внимание, что если вы включаете файлы из других директорий, значение CURDIR не меняется. Значение имеет тот же приоритет, что и при его установке в файле make (по умолчанию переменная среды CURDIR не переопределяет это значение). Обратите внимание, что установка этой переменной не влияет на работу make (она не заставляет make изменить свою рабочую директорию, например).
| • Переменная MAKE | Особые эффекты использования ‘$(MAKE)’. | |
| • Переменные/Рекурсия | Как передавать переменные в под-make. |
|
| • Опции/Рекурсия | Как передавать опции в под-make. |
|
| • -w Опция | Как опция ‘-w’ или ‘--print-directory’ помогает отладить использование рекурсивных make команд. |
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Recursion.html