Makefile - makra
Plik makeprogram pozwala na użycie makr, które są podobne do zmiennych. Makra są zdefiniowane w Makefile as = pairs. Przykład pokazano poniżej -
MACROS  = -me
PSROFF  = groff -Tps
DITROFF = groff -Tdvi
CFLAGS  = -O -systype bsd43
LIBS    = "-lncurses -lm -lsdl"
MYFACE  = ":*)"Specjalne makra
Przed wydaniem jakiegokolwiek polecenia w docelowym zestawie reguł istnieją wstępnie zdefiniowane specjalne makra -
- $ @ to nazwa pliku, który ma zostać utworzony. 
- $? to nazwy zmienionych osób zależnych. 
Na przykład możemy użyć następującej reguły -
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 $@W tym przykładzie $ @ reprezentuje cześć, a $? lub $ @. cpp pobiera wszystkie zmienione pliki źródłowe.
W regułach niejawnych są jeszcze dwa specjalne makra. Oni są -
- $ <nazwa powiązanego pliku, który spowodował działanie. 
- $ * przedrostek współużytkowany przez pliki docelowe i zależne. 
Typowa niejawna reguła dotyczy konstruowania plików .o (obiektów) z .cpp (plików źródłowych).
.cpp.o:
   $(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
   $(CC) $(CFLAGS) -c $*.cKonwencjonalne makra
Istnieją różne domyślne makra. Możesz je zobaczyć, wpisując "make -p", aby wydrukować ustawienia domyślne. Większość z nich jest dość oczywista na podstawie zasad, w których są używane.
Te predefiniowane zmienne, tj. Makra używane w regułach niejawnych, dzielą się na dwie klasy. Są następujące -
- Makra, które są nazwami programów (np. CC) 
- Makra zawierające argumenty programów (np. CFLAGS). 
Poniżej znajduje się tabela niektórych typowych zmiennych używanych jako nazwy programów we wbudowanych regułach plików makefile -
| Sr.No | Zmienne i opis | 
|---|---|
| 1 | AR Program do obsługi archiwów; domyślnie jest to `ar '. | 
| 2 | AS Program do kompilowania plików asemblerowych; domyślnie jest to „as”. | 
| 3 | CC Program do kompilowania programów w C; Domyślnie jest to `cc '. | 
| 4 | CO Program do pobierania plików z RCS; domyślnie jest to `co '. | 
| 5 | CXX Program do kompilacji programów w C ++; domyślnie jest to `g ++ '. | 
| 6 | CPP Program do uruchamiania preprocesora C, z wynikami na standardowe wyjście; domyślnie jest to `$ (CC) -E '. | 
| 7 | FC Program do kompilacji lub wstępnego przetwarzania programów Fortran i Ratfor; domyślnie jest to `f77 '. | 
| 8 | GET Program do wyodrębniania pliku z SCCS; domyślnie jest to `get '. | 
| 9 | LEX Program używany do przekształcania gramatyki Lexa w kod źródłowy; domyślnie jest to `lex '. | 
| 10 | YACC Program używany do przekształcania gramatyki Yacc w kod źródłowy; Domyślnie jest to `yacc '. | 
| 11 | LINT Program do uruchamiania linta na kodzie źródłowym; domyślnie jest to `lint '. | 
| 12 | M2C Program do kompilacji kodu źródłowego Modula-2; Domyślnie jest to `m2c '. | 
| 13 | PC Program do kompilacji programów Pascal; Domyślnie jest to `pc '. | 
| 14 | MAKEINFO Program do konwersji pliku źródłowego Texinfo do pliku Info; Domyślnie jest to `makeinfo '. | 
| 15 | TEX Program do tworzenia plików TeX dvi ze źródła TeX; domyślnie jest to `tex '. | 
| 16 | TEXI2DVI Program do tworzenia plików TeX dvi ze źródeł Texinfo; Domyślnie jest to `texi2dvi '. | 
| 17 | WEAVE Program do tłumaczenia stron internetowych na TeX; wartość domyślna to `weave '. | 
| 18 | CWEAVE Program do tłumaczenia C Web na TeX; Domyślnie jest to `cweave '. | 
| 19 | TANGLE Program do tłumaczenia stron internetowych na język Pascal; domyślnie jest to `tangle '. | 
| 20 | CTANGLE Program do tłumaczenia C Web na C; domyślnie jest to `ctangle '. | 
| 21 | RM Polecenie usunięcia pliku; domyślnie jest to `rm -f '. | 
Oto tabela zmiennych, których wartości są dodatkowymi argumentami dla powyższych programów. Domyślną wartością dla wszystkich tych elementów jest pusty ciąg, chyba że zaznaczono inaczej.
| Sr.No. | Zmienne i opis | 
|---|---|
| 1 | ARFLAGS Flagi nadające programowi do obsługi archiwum; domyślnie jest to `rv '. | 
| 2 | ASFLAGS Dodatkowe flagi, które należy przekazać asemblerowi, gdy są jawnie wywoływane w pliku `.s 'lub` .S'. | 
| 3 | CFLAGS Dodatkowe flagi, które należy przekazać kompilatorowi C. | 
| 4 | CXXFLAGS Dodatkowe flagi, które należy przekazać kompilatorowi C. | 
| 5 | COFLAGS Dodatkowe flagi do nadania wspólnemu programowi RCS. | 
| 6 | CPPFLAGS Dodatkowe flagi, które należy przekazać preprocesorowi C i programom, które go używają (na przykład kompilatorom C i Fortran). | 
| 7 | FFLAGS Dodatkowe flagi do nadania kompilatorowi języka Fortran. | 
| 8 | GFLAGS Dodatkowe flagi do nadania programowi pobierania SCCS. | 
| 9 | LDFLAGS Dodatkowe flagi, które mają być podane kompilatorom, gdy mają wywołać konsolidator, `ld '. | 
| 10 | LFLAGS Dodatkowe flagi do przekazania Lexowi. | 
| 11 | YFLAGS Dodatkowe flagi dla Yacc. | 
| 12 | PFLAGS Dodatkowe flagi, które należy przekazać kompilatorowi Pascala. | 
| 13 | RFLAGS Dodatkowe flagi do nadania kompilatorowi Fortran dla programów Ratfor. | 
| 14 | LINTFLAGS Dodatkowe flagi do nadania kłaczkom. | 
NOTE - Możesz anulować wszystkie zmienne używane przez niejawne reguły za pomocą opcji „-R” lub „--no-builtin-variable”.
Możesz także zdefiniować makra w wierszu poleceń, jak pokazano poniżej -
make CPP = /home/courses/cop4530/spring02