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) [email protected] $(LDFLAGS) -o $@
В этом примере $ @ представляет привет, а $? или $ @. cpp заберет все измененные исходные файлы.
В неявных правилах используются еще два специальных макроса. Они -
$ <имя связанного файла, вызвавшего действие.
$ * префикс, общий для целевых и зависимых файлов.
Распространенным неявным правилом является создание файлов .o (объектных) из .cpp (исходных файлов).
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
Обычные макросы
Существуют различные макросы по умолчанию. Вы можете увидеть их, набрав «make -p», чтобы распечатать значения по умолчанию. Большинство из них довольно очевидно из правил, в которых они используются.
Эти предопределенные переменные, т. Е. Макросы, используемые в неявных правилах, делятся на два класса. Они следующие -
Макросы, являющиеся названиями программ (например, CC)
Макросы, содержащие аргументы программ (например, CFLAGS).
Ниже приведена таблица некоторых общих переменных, используемых в качестве имен программ во встроенных правилах make-файлов.
Старший Нет | Переменные и описание |
---|---|
1 | AR Программа ведения архива; по умолчанию - ar. |
2 | AS Программа для компиляции сборочных файлов; по умолчанию - "as". |
3 | CC Программа для компиляции программ на языке Си; по умолчанию - cc. |
4 | CO Программа для извлечения файлов из RCS; по умолчанию - `co '. |
5 | CXX Программа для компиляции программ на C ++; по умолчанию - g ++. |
6 | CPP Программа для запуска препроцессора C с выводом результатов на стандартный вывод; по умолчанию - `$ (CC) -E '. |
7 | FC Программа для компиляции или предварительной обработки программ на Fortran и Ratfor; по умолчанию - `f77 '. |
8 | GET Программа для извлечения файла из SCCS; по умолчанию - `get '. |
9 | LEX Программа для превращения грамматик Lex в исходный код; по умолчанию - `lex '. |
10 | YACC Программа, используемая для превращения грамматик Yacc в исходный код; по умолчанию - `yacc '. |
11 | LINT Программа, используемая для запуска lint в исходном коде; по умолчанию - lint. |
12 | M2C Программа для компиляции исходного кода Modula-2; по умолчанию - m2c. |
13 | PC Программа для компиляции программ на языке Pascal; по умолчанию - `pc '. |
14 | MAKEINFO Программа для преобразования исходного файла Texinfo в файл Info; по умолчанию - makeinfo. |
15 | TEX Программа для создания файлов TeX dvi из исходников TeX; по умолчанию - "текс". |
16 | TEXI2DVI Программа для создания файлов TeX dvi из исходников Texinfo; по умолчанию - `texi2dvi '. |
17 | WEAVE Программа для перевода Интернета в TeX; по умолчанию - weave. |
18 | CWEAVE Программа для перевода C Web в TeX; по умолчанию - cweave. |
19 | TANGLE Программа для перевода Сети на Паскаль; по умолчанию - «клубок». |
20 | CTANGLE Программа для перевода C Web на C; по умолчанию - ctangle. |
21 год | RM Команда на удаление файла; по умолчанию - `rm -f '. |
Вот таблица переменных, значения которых являются дополнительными аргументами для вышеуказанных программ. Значения по умолчанию для всех из них - пустая строка, если не указано иное.
Sr. No. | Переменные и описание |
---|---|
1 | ARFLAGS Флаги для программы ведения архива; по умолчанию - `rv '. |
2 | ASFLAGS Дополнительные флаги, передаваемые ассемблеру при явном вызове в файле .s или .S. |
3 | CFLAGS Дополнительные флаги, передаваемые компилятору C. |
4 | CXXFLAGS Дополнительные флаги, передаваемые компилятору C. |
5 | COFLAGS Дополнительные флаги, передаваемые программе RCS co. |
6 | CPPFLAGS Дополнительные флаги для препроцессора C и программ, которые его используют (например, компиляторы C и Fortran). |
7 | FFLAGS Дополнительные флаги, передаваемые компилятору Fortran. |
8 | GFLAGS Дополнительные флаги, передаваемые программе получения SCCS. |
9 | LDFLAGS Дополнительные флаги, которые нужно передать компиляторам, когда они должны вызывать компоновщик ld. |
10 | LFLAGS Дополнительные флаги для передачи Лексу. |
11 | YFLAGS Дополнительные флаги для передачи Yacc. |
12 | PFLAGS Дополнительные флаги, передаваемые компилятору Паскаля. |
13 | RFLAGS Дополнительные флаги, передаваемые компилятору Fortran для программ Ratfor. |
14 | LINTFLAGS Дополнительные флажки для ворса. |
NOTE - Вы можете отменить все переменные, используемые неявными правилами, с помощью опции '-R' или '--no-builtin-variables'.
Вы также можете определить макросы в командной строке, как показано ниже -
make CPP = /home/courses/cop4530/spring02