Специальные встроенные имена целей
Некоторые имена имеют специальное значение, если они появляются в качестве целей.
.PHONY-
Предпосылки специальной цели
.PHONYсчитаются фиктивными целями. Когда приходит время рассмотреть такую цель,makeвыполнит свой рецепт безусловно, независимо от того, существует ли файл с таким именем или каково его последнее время модификации. См. Фиктивные цели. .SUFFIXES-
Предпосылки специальной цели
.SUFFIXES— список суффиксов, которые будут использоваться при проверке правил суффикса. См. Правила суффикса устаревшего формата. .DEFAULT-
Рецепт, указанный для
.DEFAULT, используется для любой цели, для которой не найдены правила (ни явные, ни неявные). См. Последний шанс. Если указан рецепт.DEFAULT, каждый файл, упомянутый в качестве предпосылки, но не как цель в правиле, будет иметь этот рецепт, выполненный от его имени. См. Алгоритм поиска неявных правил. .PRECIOUS-
Цели, от которых зависит
.PRECIOUS, получают следующее специальное обращение: еслиmakeубит или прерван во время выполнения их рецептов, цель не удаляется. См. Прерывание или убийствоmake. Также, если цель является промежуточным файлом, она не будет удалена после того, как она больше не потребуется, как это обычно делается. См. Цепочки неявных правил. В последнем аспекте она перекликается со специальной целью.SECONDARY.Вы также можете указать шаблон цели неявного правила (например, «%.o») как файл-предпосылку специальной цели
.PRECIOUSдля сохранения промежуточных файлов, созданных правилами, шаблоны целей которых соответствуют имени этого файла. .INTERMEDIATE-
Цели, от которых зависит
.INTERMEDIATE, обрабатываются как промежуточные файлы. См. Цепочки неявных правил..INTERMEDIATEбез предпосылок не имеет эффекта. .NOTINTERMEDIATE-
Предпосылки специальной цели
.NOTINTERMEDIATEникогда не рассматриваются как промежуточные файлы. См. Цепочки неявных правил..NOTINTERMEDIATEбез предпосылок приводит к тому, что все цели обрабатываются как не промежуточные.Если предпосылкой является шаблон цели, то цели, которые строятся с использованием этого правила шаблона, не считаются промежуточными.
.SECONDARY-
Цели, от которых зависит
.SECONDARY, обрабатываются как промежуточные файлы, за исключением того, что они никогда автоматически не удаляются. См. Цепочки неявных правил..SECONDARYможет быть использовано для предотвращения избыточных перестроек в некоторых необычных ситуациях. Например:hello.bin: hello.o bye.o $(CC) -o $@ $^ %.o: %.c $(CC) -c -o $@ $< .SECONDARY: hello.o bye.oПредположим, hello.bin актуальна по отношению к исходным файлам, но отсутствует файл объекта hello.o. Без
.SECONDARYmake перестроит hello.o, а затем перестроит hello.bin, хотя исходные файлы не изменились. Объявив hello.o как.SECONDARYmakeне потребуется перестраивать его и не потребуется перестраивать hello.bin тоже. Конечно, если один из исходных файлов был обновлён, все файлы объектов были бы перестроены, чтобы создание hello.bin могло успешно завершиться..SECONDARYбез предпосылок приводит к тому, что все цели обрабатываются как вторичные (т. е. ни одна цель не удаляется, потому что она считается промежуточной). .SECONDEXPANSION-
Если
.SECONDEXPANSIONупомянута в качестве цели где-либо в файле make, то все списки предпосылок, определённые после её появления, будут расширены второй раз после того, как все файлы make будут прочитаны. См. Второе расширение. .DELETE_ON_ERROR-
Если
.DELETE_ON_ERRORупомянута в качестве цели где-либо в файле make, тоmakeудалит цель правила, если она изменилась, и её рецепт завершился с ненулевым выходным статусом, точно так же, как это происходит при получении сигнала. См. Ошибки в рецептах. .IGNORE-
Если вы указываете предпосылки для
.IGNORE, тоmakeпроигнорирует ошибки при выполнении рецепта для этих конкретных файлов. Рецепт для.IGNORE(если есть) игнорируется.Если упомянута в качестве цели без предпосылок,
.IGNOREговорит проигнорировать ошибки при выполнении рецептов для всех файлов. Это использование «.IGNORE» поддерживается только для исторической совместимости. Поскольку это влияет на каждый рецепт в файле make, это не очень полезно; мы рекомендуем использовать более избирательные способы игнорирования ошибок в определённых рецептах. См. Ошибки в рецептах. .LOW_RESOLUTION_TIME-
Если вы указываете предпосылки для
.LOW_RESOLUTION_TIME,makeпредполагает, что эти файлы создаются командами, которые генерируют отметки времени с низким разрешением. Рецепт для.LOW_RESOLUTION_TIMEцели игнорируется.Отметки времени файлов с высоким разрешением многих современных файловых систем уменьшают вероятность того, что
makeошибочно сделает вывод о том, что файл актуальный. К сожалению, некоторые хосты не предоставляют способ установить отметку времени файла с высоким разрешением, поэтому команды, такие как «cp -p», которые явно устанавливают отметку времени файла, должны отбросить её подсекундную часть. Если файл создаётся такой командой, вы должны указать его как предпосылку для.LOW_RESOLUTION_TIMEчтобыmakeне делал ошибочного вывода о том, что файл неактуальный. Например:.LOW_RESOLUTION_TIME: dst dst: src cp -p src dstПоскольку «cp -p» отбрасывает подсекундную часть отметки времени src, dst обычно немного старше, чем src, даже когда она актуальна. Строка
.LOW_RESOLUTION_TIMEзаставляетmakeсчитать dst актуальной, если её отметка времени находится в начале той же секунды, что и отметка времени src.Из-за ограничения формата архива, отметки времени членов архива всегда имеют низкое разрешение. Вам не нужно указывать члены архива в качестве предпосылок для
.LOW_RESOLUTION_TIME, так какmakeделает это автоматически. .SILENT-
Если вы указываете предпосылки для
.SILENT, тоmakeне будет выводить рецепт, используемый для пересоздания этих конкретных файлов, перед их выполнением. Рецепт для.SILENTигнорируется.Если упомянута как цель без предпосылок,
.SILENTговорит не выводить рецепты перед их выполнением. Вы также можете использовать более избирательные способы отключения вывода конкретных команд рецептов. См. Вывод рецептов. Если вы хотите отключать все рецепты для определённого запускаmake, используйте параметр «-s» или «--silent» (см. Обзор параметров). .EXPORT_ALL_VARIABLES-
Просто указав её как цель, вы говорите
makeэкспортировать все переменные в дочерние процессы по умолчанию. Это альтернатива использованиюexportбез аргументов. См. Передача переменных подпроцессуmake. .NOTPARALLEL-
Если
.NOTPARALLELупоминается как цель без предпосылок, все цели в этом вызовеmakeбудут выполняться последовательно, даже если задан параметр «-j». Любая рекурсивно вызываемая командаmakeпо-прежнему будет выполнять рецепты параллельно (если её файл make также не содержит этой цели).Если у
.NOTPARALLELесть цели в качестве предпосылок, то все предпосылки этих целей будут выполняться последовательно. Это неявно добавляет.WAITмежду каждой предпосылкой перечисленных целей. См. Отключение параллельного выполнения. .ONESHELL-
Если
.ONESHELLупомянута как цель, то при построении цели все строки рецепта будут переданы одному вызову оболочки, а не каждый строка будет вызываться отдельно. См. Выполнение рецепта. .POSIX-
Если
.POSIXупомянута как цель, то файл make будет проанализирован и запущен в режиме совместимости с POSIX. Это не означает, что будут приниматься только файлы make, совместимые с POSIX: все расширенные возможности GNUmakeпо-прежнему доступны. Скорее, эта цель заставляетmakeвести себя так, как требуется POSIX, в тех областях, где поведениеmakeпо умолчанию отличается.В частности, если эта цель упомянута, рецепты будут вызываться так, как если бы оболочке был передан флаг
-e: первая неисправная команда в рецепте вызовет немедленное завершение рецепта с ошибкой.
Любой определённый суффикс неявного правила также считается специальной целью, если он появляется как цель, а также конкатенация двух суффиксов, таких как «.c.o». Эти цели — правила суффиксов, устаревший способ определения неявных правил (но способ, который всё ещё широко используется). В принципе, любое имя цели могло бы быть специальным таким образом, если вы разделите его на две части и добавите обе части в список суффиксов. На практике суффиксы обычно начинаются с «.», поэтому эти имена специальных целей также начинаются с «.». См. Правила суффикса устаревшего формата.
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/Special-Targets.html