Spec-Zone.ru › GNU Make

Функция origin

Функция origin отличается от большинства других функций тем, что она не работает со значениями переменных; она сообщает вам нечто о переменной. А именно, она сообщает вам, откуда она взялась.

Синтаксис функции origin:

$(origin variable)

Обратите внимание, что переменная — это имя переменной, о которой нужно узнать, а не ссылка на эту переменную. Поэтому обычно вы не будете использовать ‘$’ или скобки при её записи. (Однако вы можете использовать ссылку на переменную в имени, если не хотите, чтобы имя было константой.)

Результат этой функции — строка, указывающая, как была определена переменная переменная:

‘undefined’

если переменная никогда не была определена.

‘default’

если у переменной есть стандартное определение, как это обычно бывает с CC и так далее. См. Переменные, используемые неявными правилами. Обратите внимание, что если вы переопределили стандартную переменную, функция origin вернёт происхождение более позднего определения.

‘environment’

если переменная была унаследована из среды, предоставленной make.

‘environment override’

если переменная была унаследована из среды, предоставленной make, и переопределяет значение переменной в файле make в результате опции ‘-e’ (см. Краткое описание опций).

‘file’

если переменная была определена в файле make.

‘command line’

если переменная была определена в командной строке.

‘override’

если переменная была определена с директивой override в файле make (см. Директива override).

‘automatic’

если переменная — это автоматическая переменная, определенная для выполнения рецепта для каждого правила (см. Автоматические переменные).

Эта информация в первую очередь полезна (помимо вашей любознательности) для определения того, хотите ли вы принять значение переменной. Например, предположим, у вас есть файл make foo, который включает другой файл make bar. Вы хотите, чтобы переменная bletch была определена в bar, если вы выполните команду ‘make -f bar’, даже если среда содержит определение bletch. Однако, если foo определил bletch перед включением bar, вы не хотите переопределять это определение. Это можно сделать, используя директиву override в foo, придав этому определению приоритет над более поздним определением в bar; к сожалению, директива override также переопределит любые определения командной строки. Итак, bar может содержать:

ifdef bletch
ifeq "$(origin bletch)" "environment"
bletch = barf, gag, etc.
endif
endif

Если bletch была определена из среды, это переопределит её.

Если вы хотите переопределить предыдущее определение bletch в случае, если оно было получено из среды, даже с опцией ‘-e’, вы можете вместо этого написать:

ifneq "$(findstring environment,$(origin bletch))" ""
bletch = barf, gag, etc.
endif

Здесь переопределение происходит, если ‘$(origin bletch)’ возвращает либо ‘environment’, либо ‘environment override’. См. Функции для подстановки и анализа строк.

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/Origin-Function.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API