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