Spec-Zone.ru › GNU Make

Переопределение переменных

Аргумент, содержащий ‘=’, определяет значение переменной: ‘v=x’ устанавливает значение переменной v в x. Если вы задаёте значение таким образом, все обычные присваивания этой же переменной в файле make игнорируются; мы говорим, что они были переопределены аргументом командной строки.

Наиболее распространённый способ использования этой возможности — передача дополнительных флагов компиляторам. Например, в правильно написанном файле make переменная CFLAGS включена в каждый рецепт, выполняющий компиляцию C, поэтому файл foo.c будет скомпилирован примерно так:

cc -c $(CFLAGS) foo.c

Таким образом, любое значение, которое вы зададите для CFLAGS, повлияет на каждую выполняемую компиляцию. В файле make, вероятно, задано обычное значение для CFLAGS, например так:

CFLAGS=-g

Каждый раз, когда вы запускаете make, вы можете переопределить это значение, если хотите. Например, если вы скажете ‘make CFLAGS='-g -O'’, каждая компиляция C будет выполняться с ‘cc -c -g -O’. (Это также демонстрирует, как вы можете использовать кавычки в оболочке для включения пробелов и других специальных символов в значение переменной при её переопределении.)

Переменная CFLAGS — всего лишь одна из многих стандартных переменных, которые существуют именно для того, чтобы вы могли их таким образом изменять. См. Переменные, используемые неявными правилами для получения полного списка.

Вы также можете запрограммировать файл make для просмотра дополнительных переменных, предоставляя пользователю возможность контролировать другие аспекты работы файла make путём изменения переменных.

Когда вы переопределяете переменную с помощью аргумента командной строки, вы можете определить либо рекурсивно-расширяемую переменную, либо просто-расширяемую переменную. Приведённые выше примеры создают рекурсивно-расширяемую переменную; чтобы создать просто-расширяемую переменную, запишите ‘:=’ или ‘::=’ вместо ‘=’. Но, если вы не хотите включать ссылку на переменную или вызов функции в значении, которое вы указываете, нет разницы, какой тип переменной вы создаёте.

Есть один способ, которым файл make может изменить переопределённую вами переменную. Это использование директивы override, которая выглядит так: ‘override variable = value’ (см. Директива 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/Overriding.html

Spec-Zone.ru

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