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 [email protected]
Alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o [email protected]
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