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 $*.c
Konwencjonalne 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