Синтаксис вызова функций
Вызов функции похож на ссылку на переменную. Он может появляться в любом месте, где может появиться ссылка на переменную, и расширяется по тем же правилам, что и ссылки на переменные. Вызов функции выглядит так:
$(function arguments)
или так:
${function arguments}
Здесь function — имя функции; одно из небольшого списка имён, которые являются частью make. Также можно создавать собственные функции, используя встроенную функцию call.
Аргументы arguments — это аргументы функции. Они отделяются от имени функции одним или несколькими пробелами или табуляциями, а если аргументов несколько, то они разделяются запятыми. Такие пробелы и запятые не являются частью значения аргумента. Разделители, которые используются для окружения вызова функции, скобки или фигурные скобки, могут появляться в аргументе только в парных сочетаниях; другие виды разделителей могут появляться по отдельности. Если сами аргументы содержат другие вызовы функций или ссылки на переменные, лучше использовать одинаковый тип разделителей для всех ссылок; запишите «$(subst a,b,$(x))», а не «$(subst a,b,${x})». Это потому, что это более понятно, и потому что только один тип разделителя используется для поиска конца ссылки.
Каждый аргумент расширяется перед вызовом функции, если не указано иное ниже. Подстановка выполняется в том порядке, в котором аргументы появляются.
Специальные символы
При использовании символов, являющихся специальными для make в качестве аргументов функций, возможно потребуется их скрыть. GNU make не поддерживает экранирование символов с помощью обратных слэшей или других последовательностей экранирования; однако, поскольку аргументы разбиваются перед их расширением, вы можете скрыть их, поместив их в переменные.
Символы, которые могут потребоваться скрыть, включают:
- Запятые
- Начальные пробелы в первом аргументе
- Несоответствующие открытые скобки или фигурные скобки
- Открытая скобка или фигурная скобка, если вы не хотите, чтобы она начинала парное сочетание
Например, вы можете определить переменные comma и space со значениями изолированных запятых и пробелов, а затем подставить эти переменные там, где нужны такие символы, например, так:
comma:= ,
empty:=
space:= $(empty) $(empty)
foo:= a b c
bar:= $(subst $(space),$(comma),$(foo))
# bar is now ‘a,b,c’.
Здесь функция subst заменяет каждый пробел запятой через значение foo, и подставляет результат.
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/Syntax-of-Functions.html