Учебники

Makefile — Макросы

Программа make позволяет вам использовать макросы, которые похожи на переменные. Макросы определены в Makefile как пары =. Пример был показан ниже —

MACROS  = -me
PSROFF  = groff -Tps
DITROFF = groff -Tdvi
CFLAGS  = -O -systype bsd43
LIBS    = "-lncurses -lm -lsdl"
MYFACE  = ":*)"

Специальные макросы

Перед выполнением любой команды в целевом наборе правил предопределены определенные специальные макросы —

  • $ @ — это имя файла, который нужно создать.

  • $? это имена измененных иждивенцев.

$ @ — это имя файла, который нужно создать.

$? это имена измененных иждивенцев.

Например, мы можем использовать правило следующим образом:

hello: main.cpp hello.cpp factorial.cpp
   $(CC) $(CFLAGS) $? $(LDFLAGS) -o $@

Alternatively:

hello: main.cpp hello.cpp factorial.cpp
   $(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@

В этом примере $ @ представляет привет и $? или $ @. cpp забирает все измененные исходные файлы.

В неявных правилах используются еще два специальных макроса. Они —

  • $ <имя связанного файла, вызвавшего действие.

  • $ * префикс, общий для целевых и зависимых файлов.

$ <имя связанного файла, вызвавшего действие.

$ * префикс, общий для целевых и зависимых файлов.

Общее неявное правило — для создания .o (объектных) файлов из .cpp (исходных файлов).

.cpp.o:
   $(CC) $(CFLAGS) -c $<

Alternatively:

.cpp.o:
   $(CC) $(CFLAGS) -c $*.c

Обычные макросы

Существуют различные макросы по умолчанию. Вы можете увидеть их, набрав «make -p» для распечатки значений по умолчанию. Большинство из них довольно очевидно из правил, в которых они используются.

Эти предопределенные переменные, то есть макросы, используемые в неявных правилах, делятся на два класса. Они заключаются в следующем —

  • Макросы, которые являются названиями программ (например, CC)

  • Макросы, которые содержат аргументы программ (например, CFLAGS).

Макросы, которые являются названиями программ (например, CC)

Макросы, которые содержат аргументы программ (например, CFLAGS).

Ниже приведена таблица некоторых распространенных переменных, используемых в качестве имен программ во встроенных правилах make-файлов.

Sr.No Переменные и описание
1

Арканзас

Архивно-поддерживающая программа; по умолчанию это `ar ‘.

2

КАК

Программа для компиляции сборочных файлов; по умолчанию `as ‘.

3

CC

Программа для составления программ на С; по умолчанию это `cc ‘.

4

Колорадо

Программа для проверки файлов из RCS; по умолчанию это `co ‘.

5

CXX

Программа для компиляции программ на C ++; по умолчанию это `g ++ ‘.

6

CPP

Программа для запуска препроцессора C, с результатами на стандартный вывод; по умолчанию это `$ (CC) -E ‘.

7

FC

Программа для компиляции или предварительной обработки программ на Fortran и Ratfor; по умолчанию `f77 ‘.

8

ПОЛУЧИТЬ

Программа для извлечения файла из SCCS; по умолчанию `get ‘.

9

LEX

Программа для превращения грамматик Lex в исходный код; по умолчанию это `lex ‘.

10

YACC

Программа для преобразования грамматики Yacc в исходный код; по умолчанию это `yacc ‘.

11

LINT

Программа для запуска lint в исходном коде; по умолчанию это `lint ‘.

12

M2C

Программа, используемая для компиляции исходного кода Modula-2; по умолчанию `m2c ‘.

13

ПК

Программа для компиляции программ на Паскале; по умолчанию это `pc ‘.

14

MAKEINFO

Программа для преобразования исходного файла Texinfo в Info-файл; по умолчанию это `makeinfo ‘.

15

TEX

Программа для создания файлов TeX DVI из источника TeX; по умолчанию это `tex ‘.

16

texi2dvi

Программа для создания файлов TeX dvi из источника Texinfo; по умолчанию используется texi2dvi.

17

WEAVE

Программа для перевода Web в TeX; по умолчанию это «переплетение».

18

CWEAVE

Программа для перевода C Web в TeX; по умолчанию это `cweave ‘.

19

TANGLE

Программа для перевода веб на Паскаль; по умолчанию это «клубок».

20

CTANGLE

Программа для перевода C Web в C; по умолчанию это `ctangle ‘.

21

RM

Команда на удаление файла; по умолчанию это `rm -f ‘.

Арканзас

Архивно-поддерживающая программа; по умолчанию это `ar ‘.

КАК

Программа для компиляции сборочных файлов; по умолчанию `as ‘.

CC

Программа для составления программ на С; по умолчанию это `cc ‘.

Колорадо

Программа для проверки файлов из RCS; по умолчанию это `co ‘.

CXX

Программа для компиляции программ на C ++; по умолчанию это `g ++ ‘.

CPP

Программа для запуска препроцессора C, с результатами на стандартный вывод; по умолчанию это `$ (CC) -E ‘.

FC

Программа для компиляции или предварительной обработки программ на Fortran и Ratfor; по умолчанию `f77 ‘.

ПОЛУЧИТЬ

Программа для извлечения файла из SCCS; по умолчанию `get ‘.

LEX

Программа для превращения грамматик Lex в исходный код; по умолчанию это `lex ‘.

YACC

Программа для преобразования грамматики Yacc в исходный код; по умолчанию это `yacc ‘.

LINT

Программа для запуска lint в исходном коде; по умолчанию это `lint ‘.

M2C

Программа, используемая для компиляции исходного кода Modula-2; по умолчанию `m2c ‘.

ПК

Программа для компиляции программ на Паскале; по умолчанию это `pc ‘.

MAKEINFO

Программа для преобразования исходного файла Texinfo в Info-файл; по умолчанию это `makeinfo ‘.

TEX

Программа для создания файлов TeX DVI из источника TeX; по умолчанию это `tex ‘.

texi2dvi

Программа для создания файлов TeX dvi из источника Texinfo; по умолчанию используется texi2dvi.

WEAVE

Программа для перевода Web в TeX; по умолчанию это «переплетение».

CWEAVE

Программа для перевода C Web в TeX; по умолчанию это `cweave ‘.

TANGLE

Программа для перевода веб на Паскаль; по умолчанию это «клубок».

CTANGLE

Программа для перевода C Web в C; по умолчанию это `ctangle ‘.

RM

Команда на удаление файла; по умолчанию это `rm -f ‘.

Вот таблица переменных, значения которых являются дополнительными аргументами для программ выше. Значениями по умолчанию для всех них является пустая строка, если не указано иное.

Sr.No. Переменные и описание
1

ARFLAGS

Флаги для выдачи архива, поддерживающего программу; по умолчанию это `rv ‘.

2

ASFLAGS

Дополнительные флаги для ассемблера при явном вызове в файл `.s ‘или` .S.

3

CFLAGS

Дополнительные флаги для компилятора Си.

4

CXXFLAGS

Дополнительные флаги для компилятора Си.

5

COFLAGS

Дополнительные флаги для передачи в программу RCS.

6

CPPFLAGS

Дополнительные флаги для препроцессора C и программ, которые его используют (таких как компиляторы C и Fortran).

7

FFLAGS

Дополнительные флаги для компилятора Фортрана.

8

GFLAGS

Дополнительные флаги для программы SCCS get.

9

LDFLAGS

Дополнительные флаги для компиляторов, когда они должны вызывать компоновщик, `ld ‘.

10

LFLAGS

Дополнительные флаги для Лекса.

11

YFLAGS

Дополнительные флаги для Yacc.

12

PFLAGS

Дополнительные флаги для передачи компилятору Pascal.

13

RFLAGS

Дополнительные флаги для компилятора Фортрана для программ Ratfor.

14

LINTFLAGS

Дополнительные флаги для ворса.

ARFLAGS

Флаги для выдачи архива, поддерживающего программу; по умолчанию это `rv ‘.

ASFLAGS

Дополнительные флаги для ассемблера при явном вызове в файл `.s ‘или` .S.

CFLAGS

Дополнительные флаги для компилятора Си.

CXXFLAGS

Дополнительные флаги для компилятора Си.

COFLAGS

Дополнительные флаги для передачи в программу RCS.

CPPFLAGS

Дополнительные флаги для препроцессора C и программ, которые его используют (таких как компиляторы C и Fortran).

FFLAGS

Дополнительные флаги для компилятора Фортрана.

GFLAGS

Дополнительные флаги для программы SCCS get.

LDFLAGS

Дополнительные флаги для компиляторов, когда они должны вызывать компоновщик, `ld ‘.

LFLAGS

Дополнительные флаги для Лекса.

YFLAGS

Дополнительные флаги для Yacc.

PFLAGS

Дополнительные флаги для передачи компилятору Pascal.

RFLAGS

Дополнительные флаги для компилятора Фортрана для программ Ratfor.

LINTFLAGS

Дополнительные флаги для ворса.

ПРИМЕЧАНИЕ. — Вы можете отменить все переменные, используемые неявными правилами, с помощью опции ‘-R’ или ‘—no-builtin-variable’.

Вы также можете определить макросы в командной строке, как показано ниже —