Makefile - Macros
o makeprograma permite que você use macros, que são semelhantes a variáveis. As macros são definidas em um Makefile como = pares. Um exemplo foi mostrado abaixo -
MACROS = -me
PSROFF = groff -Tps
DITROFF = groff -Tdvi
CFLAGS = -O -systype bsd43
LIBS = "-lncurses -lm -lsdl"
MYFACE = ":*)"
Macros Especiais
Antes de emitir qualquer comando em um conjunto de regras de destino, existem certas macros especiais predefinidas -
$ @ é o nome do arquivo a ser feito.
$? são os nomes dos dependentes alterados.
Por exemplo, podemos usar uma regra da seguinte maneira -
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o [email protected]
Alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o [email protected]
Neste exemplo, $ @ representa hello e $? ou $ @. cpp pega todos os arquivos de origem alterados.
Existem mais duas macros especiais usadas nas regras implícitas. Eles são -
$ <o nome do arquivo relacionado que causou a ação.
$ * o prefixo compartilhado pelos arquivos de destino e dependentes.
A regra implícita comum é para a construção de arquivos .o (objeto) a partir de .cpp (arquivos de origem).
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
Macros Convencionais
Existem várias macros padrão. Você pode vê-los digitando "make -p" para imprimir os padrões. A maioria é bastante óbvia pelas regras em que são usados.
Essas variáveis predefinidas, ou seja, macros usadas em regras implícitas, se enquadram em duas classes. Eles são os seguintes -
Macros que são nomes de programas (como CC)
Macros que contêm argumentos dos programas (como CFLAGS).
Abaixo está uma tabela de algumas das variáveis comuns usadas como nomes de programas nas regras embutidas de makefiles -
Sr. Não | Variáveis e descrição |
---|---|
1 | AR Programa de manutenção de arquivos; o padrão é `ar '. |
2 | AS Programa para compilar arquivos de montagem; o padrão é `as '. |
3 | CC Programa para compilar programas C; o padrão é `cc '. |
4 | CO Programa para fazer check-out de arquivos do RCS; o padrão é `co '. |
5 | CXX Programa para compilar programas C ++; o padrão é `g ++ '. |
6 | CPP Programa para rodar o pré-processador C, com resultados para saída padrão; o padrão é `$ (CC) -E '. |
7 | FC Programa de compilação ou pré-processamento de programas Fortran e Ratfor; o padrão é `f77 '. |
8 | GET Programa para extrair um arquivo do SCCS; o padrão é `get '. |
9 | LEX Programa a ser usado para transformar gramáticas Lex em código-fonte; o padrão é `lex '. |
10 | YACC Programa a ser usado para transformar gramáticas Yacc em código-fonte; o padrão é `yacc '. |
11 | LINT Programa a ser usado para executar o lint no código-fonte; o padrão é `lint '. |
12 | M2C Programa a ser usado para compilar o código-fonte do Modula-2; o padrão é `m2c '. |
13 | PC Programa para compilar programas Pascal; o padrão é `pc '. |
14 | MAKEINFO Programa para converter um arquivo fonte Texinfo em um arquivo Info; o padrão é `makeinfo '. |
15 | TEX Programa para criar arquivos dvi em TeX a partir de fontes TeX; o padrão é `tex '. |
16 | TEXI2DVI Programa para criar arquivos TeX dvi a partir de fontes Texinfo; o padrão é `texi2dvi '. |
17 | WEAVE Programa para traduzir Web em TeX; o padrão é `weave '. |
18 | CWEAVE Programa para traduzir C Web em TeX; o padrão é `cweave '. |
19 | TANGLE Programa para traduzir Web em Pascal; o padrão é `tangle '. |
20 | CTANGLE Programa para traduzir C Web em C; o padrão é `ctangle '. |
21 | RM Comando para remover um arquivo; o padrão é `rm -f '. |
Aqui está uma tabela de variáveis cujos valores são argumentos adicionais para os programas acima. Os valores padrão para todos esses é a string vazia, a menos que indicado de outra forma.
Sr. Não. | Variáveis e descrição |
---|---|
1 | ARFLAGS Sinalizadores para fornecer o programa de manutenção de arquivos; o padrão é `rv '. |
2 | ASFLAGS Sinalizadores extras para fornecer ao montador quando explicitamente invocado em um arquivo `.s 'ou` .S'. |
3 | CFLAGS Sinalizadores extras para fornecer ao compilador C. |
4 | CXXFLAGS Sinalizadores extras para fornecer ao compilador C. |
5 | COFLAGS Sinalizadores extras para fornecer ao programa RCS co. |
6 | CPPFLAGS Sinalizadores extras para fornecer ao pré-processador C e aos programas que o utilizam (como compiladores C e Fortran). |
7 | FFLAGS Sinalizadores extras para fornecer ao compilador Fortran. |
8 | GFLAGS Sinalizadores extras para fornecer ao programa get do SCCS. |
9 | LDFLAGS Sinalizadores extras para fornecer aos compiladores quando eles devem invocar o linker, `ld '. |
10 | LFLAGS Bandeiras extras para dar a Lex. |
11 | YFLAGS Bandeiras extras para dar ao Yacc. |
12 | PFLAGS Sinalizadores extras para fornecer ao compilador Pascal. |
13 | RFLAGS Sinalizadores extras para fornecer ao compilador Fortran para programas Ratfor. |
14 | LINTFLAGS Sinalizadores extras para dar ao fiapo. |
NOTE - Você pode cancelar todas as variáveis usadas por regras implícitas com a opção '-R' ou '--no-builtin-variables'.
Você também pode definir macros na linha de comando, conforme mostrado abaixo -
make CPP = /home/courses/cop4530/spring02