make 程序允许您使用与变量类似的宏.宏在Makefile中定义为= pairs.下面显示了一个示例 :
MACROS = -mePSROFF = groff -TpsDITROFF = groff -TdviCFLAGS = -O -systype bsd43LIBS = "-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获取所有已更改的源文件.
隐式规则中还使用了两个特殊宏.它们是 :
$<导致操作的相关文件的名称.
$ *目标文件和相关文件共享的前缀.
常见的隐式规则用于构造.cpp(源文件)之外的.o(对象)文件.
.cpp.o: $(CC)$(CFLAGS)-c $< 或者: .cpp.o: $(CC)$(CFLAGS)-c $ * .c
常规宏
有各种默认宏.您可以通过键入"make -p"来打印默认值来查看它们.大多数都是从使用它们的规则中非常明显的.
这些预定义变量,即隐式规则中使用的宏分为两类.它们如下<
作为程序名称的宏(例如CC)
包含程序参数的宏(例如CFLAGS).
下面是一个一些常见变量的表,用作makefile内置规则中的程序名称 :
Sr.No | 变量&说明 |
---|---|
1 | AR 存档维护程序;默认是'ar'. |
2 | AS 编译汇编文件的程序;默认为"as". |
3 | CC 编制C程序的程序;默认为"cc". |
4 | CO 从RCS检出文件的程序;默认是'co'. |
5 | CXX 编译C ++程序的程序;默认是`g ++'. |
6 | CPP 运行C预处理器的程序,结果为标准输出;默认为`$(CC)-E'. |
7 | FC 编译或预处理Fortran和Ratfor程序的程序;默认为`f77'. |
8 | 获取 从SCCS中提取文件的程序;默认是`get'. |
9 | LEX 用于将Lex语法转换为源代码的程序;默认是`lex'. |
10 | YACC 用于将Yacc语法转换为源代码的程序;默认是`yacc'. |
11 | LINT 用于在源代码上运行lint的程序;默认是`lint'. |
12 | M2C 用于编译Modula-2源代码的程序;默认为`m2c'. |
13 | PC 编译Pascal程序的程序;默认是'pc'. |
14 | MAKEINFO 将Texinfo源文件转换为Info文件的程序;默认是`makeinfo'. |
15 | TEX 从TeX源制作TeX dvi文件的程序;默认是`tex'. |
16 | TEXI2DVI 从Texinfo来源制作TeX dvi文件的程序;默认是`texi2dvi'. |
17 | WEAVE 将网页翻译成TeX的计划;默认是`weave'. |
18 | CWEAVE 将C Web翻译成TeX的程序;默认是`cweave'. |
19 | TANGLE 将Web翻译成Pascal的程序;默认是`tangle'. |
20 | CTANGLE 将C Web翻译成C的程序;默认是`ctangle'. |
21 | RM 删除文件的命令;默认是`rm -f'. |
这是一个变量表,其值是附加参数对于上面的程序.除非另有说明,否则所有这些的默认值都是空字符串.
Sr .No. | 变量&描述 |
---|---|
1 | ARFLAGS 提供存档维护程序的标志;默认为`rv'. |
2 | ASFLAGS 在`.s'或`.S'上显式调用时给予汇编程序的额外标志文件. |
3 | CFLAGS 提供给C编译器的额外标志. |
4 | CXXFLAGS 给C编译器的额外标志. |
5 | COFLAGS 提供给RCS合作计划的额外标志. |
6 | CPPFLAGS 为C预处理器和使用它的程序提供额外的标志(例如C和Fortran编译器). |
7 | FFLAGS 提供给Fortran编译器的额外标志. |
8 | GFLAGS 提供给SCCS get程序的额外标志. |
9 | LDFLAGS 额外的标志当他们应该调用链接器时给予编译器"ld". |
10 | LFLAGS 给予Lex的额外标志. |
11 | YFLAGS 提供给Yacc的额外标志. |
12 | PFLAGS 额外提供给Pascal编译器的标志. |
13 | RFLAGS 为Fortfor编译器提供Ratfor程序的额外标志. |
14 | LINTFLAGS 赋予lint的额外标志. |
注意 : ;您可以使用'-R'或'--no-builtin-variables'选项取消隐式规则使用的所有变量.
您还可以在命令行中定义宏,如下所示 :
make CPP =/home/courses/cop4530/spring02