Spec-Zone.ru › GNU Make

Переменные для задания команд

Файлы Make должны содержать переменные для переопределения некоторых команд, опций и так далее.

В частности, большинство утилит следует запускать через переменные. Таким образом, если вы используете Bison, имейте переменную BISON, значение которой по умолчанию задано как ‘BISON = bison’, и ссылайтесь на неё как на $(BISON), когда вам нужно использовать Bison.

Утилиты управления файлами, такие как ln, rm, mv, и так далее, не обязательно ссылаться через переменные таким образом, так как пользователям не нужно заменять их другими программами.

Каждая переменная с именем программы должна иметь переменную опций, используемую для передачи опций программе. Добавьте ‘FLAGS’ к имени переменной с именем программы, чтобы получить имя переменной опций — например, BISONFLAGS. (Имена CFLAGS для компилятора C, YFLAGS для yacc и LFLAGS для lex являются исключениями из этого правила, но мы их сохраняем, потому что они стандартные). Используйте CPPFLAGS в любой команде компиляции, которая выполняет препроцессор, и используйте LDFLAGS в любой команде компиляции, которая выполняет линковку, а также в любом непосредственном использовании ld.

Если есть опции компилятора C, которые обязательно должны быть использованы для правильной компиляции определенных файлов, не включайте их в CFLAGS. Пользователи ожидают, что смогут указать CFLAGS самостоятельно. Вместо этого организуйте передачу необходимых опций компилятору C независимо от CFLAGS, написав их явно в командах компиляции или определив неявленное правило, как это:

CFLAGS = -g
ALL_CFLAGS = -I. $(CFLAGS)
.c.o:
        $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<

Включите опцию ‘-g’ в CFLAGS, потому что она не требуется для правильной компиляции. Вы можете рассматривать её как необязательный, но рекомендуемый, параметр по умолчанию. Если пакет настроен так, что он компилируется с GCC по умолчанию, то вы можете включить ‘-O’ в значение по умолчанию для CFLAGS также.

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

CFLAGS должно использоваться в каждом вызове компилятора C, как для компиляции, так и для линковки.

Каждый файл Makefile должен определять переменную INSTALL, которая является основной командой для установки файла в систему.

Каждый Makefile также должен определять переменные INSTALL_PROGRAM и INSTALL_DATA. (Значение по умолчанию для INSTALL_PROGRAM должно быть $(INSTALL); значение по умолчанию для INSTALL_DATA должно быть ${INSTALL} -m 644). Затем эти переменные должны использоваться в качестве команд для фактической установки, для исполняемых и неисполняемых файлов соответственно. Минимальное использование этих переменных выглядит следующим образом:

$(INSTALL_PROGRAM) foo $(bindir)/foo
$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a

Однако предпочтительнее поддерживать префикс DESTDIR для целевых файлов, как объяснено в следующем разделе.

Допустимо, но не обязательно, устанавливать несколько файлов в одной команде, используя в качестве последнего аргумента директорию, как в этом примере:

$(INSTALL_PROGRAM) foo bar baz $(bindir)

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/Command-Variables.html

Spec-Zone.ru

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