Makefile - Macro

Il makeprogramma consente di utilizzare macro, che sono simili alle variabili. Le macro sono definite in un Makefile come = coppie. Di seguito è stato mostrato un esempio:

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

Macro speciali

Prima di eseguire qualsiasi comando in un set di regole di destinazione, ci sono alcune macro speciali predefinite:

  • $ @ è il nome del file da creare.

  • $? sono i nomi dei dipendenti modificati.

Ad esempio, potremmo usare una regola come segue:

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 $@

In questo esempio, $ @ rappresenta ciao e $? o $ @. cpp preleva tutti i file sorgente modificati.

Ci sono altre due macro speciali usate nelle regole implicite. Sono -

  • $ <il nome del file correlato che ha causato l'azione.

  • $ * il prefisso condiviso dai file di destinazione e dipendenti.

La regola implicita comune è per la costruzione di file .o (oggetto) da .cpp (file sorgente).

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

Alternatively:

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

Macro convenzionali

Sono disponibili varie macro predefinite. Puoi vederli digitando "make -p" per stampare i valori predefiniti. La maggior parte sono abbastanza evidenti dalle regole in cui vengono utilizzate.

Queste variabili predefinite, ovvero le macro utilizzate nelle regole implicite, rientrano in due classi. Sono i seguenti:

  • Macro che sono nomi di programmi (come CC)

  • Macro che contengono argomenti dei programmi (come CFLAGS).

Di seguito è riportata una tabella di alcune delle variabili comuni utilizzate come nomi di programmi nelle regole integrate dei makefile:

Suor n Variabili e descrizione
1

AR

Programma di conservazione dell'archivio; il valore predefinito è "ar".

2

AS

Programma per compilare file assembly; il valore predefinito è "as".

3

CC

Programma per compilare programmi C; il valore predefinito è "cc".

4

CO

Programma per estrarre file da RCS; il valore predefinito è "co".

5

CXX

Programma per compilare programmi C ++; il valore predefinito è "g ++".

6

CPP

Programma per eseguire il preprocessore C, con risultati sullo standard output; il valore predefinito è "$ (CC) -E".

7

FC

Programma per la compilazione o la preelaborazione di programmi Fortran e Ratfor; il valore predefinito è "f77".

8

GET

Programma per estrarre un file da SCCS; il valore predefinito è "get".

9

LEX

Programma da utilizzare per trasformare le grammatiche Lex in codice sorgente; il valore predefinito è "lex".

10

YACC

Programma da utilizzare per trasformare le grammatiche Yacc in codice sorgente; il valore predefinito è "yacc".

11

LINT

Programma da utilizzare per eseguire lint sul codice sorgente; il valore predefinito è "lint".

12

M2C

Programma da utilizzare per compilare il codice sorgente Modula-2; il valore predefinito è "m2c".

13

PC

Programma per compilare programmi Pascal; l'impostazione predefinita è "pc".

14

MAKEINFO

Programma per convertire un file sorgente Texinfo in un file Info; il valore predefinito è "makeinfo".

15

TEX

Programma per creare file TeX dvi da sorgenti TeX; il valore predefinito è "tex".

16

TEXI2DVI

Programma per creare file TeX dvi dalla sorgente Texinfo; il valore predefinito è `texi2dvi '.

17

WEAVE

Programma per tradurre Web in TeX; il valore predefinito è "tessere".

18

CWEAVE

Programma per tradurre C Web in TeX; il valore predefinito è "cweave".

19

TANGLE

Programma per tradurre Web in Pascal; il valore predefinito è "tangle".

20

CTANGLE

Programma per tradurre C Web in C; il valore predefinito è "ctangle".

21

RM

Comando per rimuovere un file; il valore predefinito è "rm -f".

Ecco una tabella di variabili i cui valori sono argomenti aggiuntivi per i programmi sopra. Il valore predefinito per tutti questi è la stringa vuota, se non diversamente specificato.

Sr.No. Variabili e descrizione
1

ARFLAGS

Flag per fornire il programma di mantenimento dell'archivio; il valore predefinito è "rv".

2

ASFLAGS

Flag aggiuntivi da dare all'assembler quando invocato esplicitamente su un file `.s 'o` .S'.

3

CFLAGS

Flag extra da dare al compilatore C.

4

CXXFLAGS

Flag extra da dare al compilatore C.

5

COFLAGS

Flag extra da dare al programma RCS co.

6

CPPFLAGS

Flag extra da dare al preprocessore C e ai programmi che lo usano (come i compilatori C e Fortran).

7

FFLAGS

Flag aggiuntivi da dare al compilatore Fortran.

8

GFLAGS

Flag aggiuntivi da dare al programma SCCS get.

9

LDFLAGS

Flag aggiuntivi da dare ai compilatori quando si suppone che invocino il linker, `ld '.

10

LFLAGS

Flag extra da dare a Lex.

11

YFLAGS

Bandiere extra da dare a Yacc.

12

PFLAGS

Flag extra da dare al compilatore Pascal.

13

RFLAGS

Flag extra da dare al compilatore Fortran per i programmi Ratfor.

14

LINTFLAGS

Bandiere extra da dare alla lanugine.

NOTE - Puoi cancellare tutte le variabili usate dalle regole implicite con l'opzione '-R' o '--no-builtin-variables'.

È inoltre possibile definire macro dalla riga di comando come mostrato di seguito:

make CPP = /home/courses/cop4530/spring02