Как работает переменная MAKE
Рекурсивные make команды всегда должны использовать переменную MAKE, а не явное имя команды «make», как показано здесь:
subsystem:
cd subdir && $(MAKE)
Значение этой переменной — имя файла, с помощью которого был вызван make. Если этот файл был /bin/make, то выполняемая команда — «cd subdir && /bin/make». Если вы используете специальную версию make, чтобы запустить файл make на верхнем уровне, то та же специальная версия будет выполнена для рекурсивных вызовов.
В качестве специальной функции, использование переменной MAKE в команде правила изменяет действие опции «-t» («--touch»), «-n» («--just-print») или «-q» («--question»). Использование переменной MAKE имеет тот же эффект, что и использование символа «+» в начале строки команды. См. Вместо выполнения команд. Эта специальная функция включена только в том случае, если переменная MAKE появляется непосредственно в команде: она не применяется, если переменная MAKE упоминается через расширение другой переменной. В последнем случае необходимо использовать токен «+», чтобы получить эти специальные эффекты.
Рассмотрим команду «make -t» в приведённом примере. (Опция «-t» отмечает цели как обновлённые без фактического выполнения каких-либо команд; см. Вместо выполнения.) В соответствии с обычным определением «-t», команда «make -t» в примере создала бы файл с именем subsystem и ничего более. На самом деле вы хотите выполнить «cd subdir && make -t»; но для этого требуется выполнить команду, а «-t» запрещает выполнение команд.
Специальная функция заставляет это работать так, как вы хотите: всякий раз, когда строка команды правила содержит переменную MAKE, флаги «-t», «-n» и «-q» не применяются к этой строке. Команды, содержащие MAKE, выполняются обычно, несмотря на наличие флага, который заставляет большинство команд не выполняться. Обычный механизм MAKEFLAGS передаёт флаги под-make (см. Передача опций под-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/MAKE-Variable.html