make程式允許您使用宏,這是類似的變數。 = 一對一個Makefile中定義的宏。例如:
MACROS= -me PSROFF= groff -Tps DITROFF= groff -Tdvi CFLAGS= -O -systype bsd43 LIBS = "-lncurses -lm -lsdl" MYFACE = ":*)" |
- 特殊的宏
目標規則集發出任何命令之前,有一些特殊的預定義宏。
-
$@ 到的檔的名稱。
-
$? 是改變的眷屬的名字。
因此,舉例來說,我們可以使用一個規則
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o $@
alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@
|
在這個例子中$@代表 hello, $? 或$@.cpp將拾取所有更改的原始檔案。
有兩個比較特殊的隱含規則中使用的宏。它們是
-
$< 導致該操作的相應的檔中的名稱。
-
$* 首碼共用目標和相關檔。
常見的隱含規則的構造 .o(對象)檔,.cpp(原始檔案)。
.o.cpp:
$(CC) $(CFLAGS) -c $<
alternatively
.o.cpp:
$(CC) $(CFLAGS) -c $*.c
|
注意:要獲得更詳細的關於Makefile規則,在另一部分。
- 傳統宏
有很多默認的宏(輸入“make -p”列印出來的默認值)。大多數使用它們的規則是很明顯的:
這些預定義變數,即。在隱含規則中使用的宏分為兩大類:那些程式名(例如CC)和那些含有參數的程式(如CFLAGS)。
下麵是一些比較常見的變數用作內置規則:makefile檔的程式名稱的表。
| AR | Archive-maintaining program; default `ar'. |
| AS | Program for compiling assembly files; default `as'. |
| CC | Program for compiling C programs; default `cc'. |
| CO | Program for checking out files from RCS; default `co'. |
| CXX | Program for compiling C++ programs; default `g++'. |
| CPP | Program for running the C preprocessor, with results to standard output; default `$(CC) -E'. |
| FC | Program for compiling or preprocessing Fortran and Ratfor programs; default `f77'. |
| GET | Program for extracting a file from SCCS; default `get'. |
| LEX | Program to use to turn Lex grammars into source code; default `lex'. |
| YACC | Program to use to turn Yacc grammars into source code; default `yacc'. |
| LINT | Program to use to run lint on source code; default `lint'. |
| M2C | Program to use to compile Modula-2 source code; default `m2c'. |
| PC | Program for compiling Pascal programs; default `pc'. |
| MAKEINFO | Program to convert a Texinfo source file into an Info file; default `makeinfo'. |
| TEX | Program to make TeX dvi files from TeX source; default `tex'. |
| TEXI2DVI | Program to make TeX dvi files from Texinfo source; default `texi2dvi'. |
| WEAVE | Program to translate Web into TeX; default `weave'. |
| CWEAVE | Program to translate C Web into TeX; default `cweave'. |
| TANGLE | Program to translate Web into Pascal; default `tangle'. |
| CTANGLE | Program to translate C Web into C; default `ctangle'. |
| RM | Command to remove a file; default `rm -f'. |
這裏是一個變數,其值是上述程式的額外的參數表。所有這些的默認值是空字元串,除非另有說明。
| ARFLAGS | Flags to give the archive-maintaining program; default `rv'. |
| ASFLAGS | Extra flags to give to the assembler (when explicitly invoked on a `.s' or `.S' file). |
| CFLAGS | Extra flags to give to the C compiler. |
| CXXFLAGS | Extra flags to give to the C compiler. |
| COFLAGS | Extra flags to give to the RCS co program. |
| CPPFLAGS | Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers). |
| FFLAGS | Extra flags to give to the Fortran compiler. |
| GFLAGS | Extra flags to give to the SCCS get program. |
| LDFLAGS | Extra flags to give to compilers when they are supposed to invoke the linker, `ld'. |
| LFLAGS | Extra flags to give to Lex. |
| YFLAGS | Extra flags to give to Yacc. |
| PFLAGS | Extra flags to give to the Pascal compiler. |
| RFLAGS | Extra flags to give to the Fortran compiler for Ratfor programs. |
| LINTFLAGS | Extra flags to give to lint. |
注:您可以取消`-R'或` --no-builtin-variables“選項隱含規則使用的所有變數。
如,也可以在命令行中定義的宏
make CPP = /home/courses/cop4530/spring02
|
上一篇:
為什麼需要Makefile?
下一篇:
Makefile 定義依賴性
