Makefile - 宏
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 选取所有已更改的源文件。
隐式规则中还使用了两个比较特殊的宏。他们是 -
$< 导致该操作的相关文件的名称。
$* 目标文件和依赖文件共享的前缀。
常见的隐式规则是从 .cpp(源文件)构建 .o(对象)文件。
.cpp.o: $(CC) $(CFLAGS) -c $< Alternatively: .cpp.o: $(CC) $(CFLAGS) -c $*.c
常规宏
有各种默认宏。您可以通过输入“make -p”来打印默认值来查看它们。从它们的使用规则来看,大多数都是非常明显的。
这些预定义变量,即隐式规则中使用的宏,分为两类。它们如下 -
作为程序名称的宏(例如 CC)
包含程序参数的宏(例如 CFLAGS)。
下表列出了在 makefile 的内置规则中用作程序名称的一些常见变量 -
先生编号 | 变量和描述 |
---|---|
1 | 增强现实 档案维护程序;默认是“ar”。 |
2 | 作为 编译汇编文件的程序;默认为“as”。 |
3 |
抄送 编写C程序的程序;默认为“cc”。 |
4 |
一氧化碳 从 RCS 检出文件的程序;默认为“co”。 |
5 |
CXX 编写C++程序的程序;默认是“g++”。 |
6 |
消费者保护计划 编程运行 C 预处理器,并将结果输出到标准输出;默认为“$(CC) -E”。 |
7 |
FC 编译或预处理 Fortran 和 Ratfor 程序的程序;默认为“f77”。 |
8 |
得到 从 SCCS 中提取文件的程序;默认是“获取”。 |
9 |
莱克斯 用于将 Lex 语法转换为源代码的程序;默认是“lex”。 |
10 |
亚克力 用于将 Yacc 语法转换为源代码的程序;默认是“yacc”。 |
11 |
皮棉 用于在源代码上运行 lint 的程序;默认为“lint”。 |
12 |
M2C 用于编译 Modula-2 源代码的程序;默认为“m2c”。 |
13 |
个人电脑 编译 Pascal 程序的程序;默认是“电脑”。 |
14 |
制造信息 将Texinfo源文件转换为Info文件的程序;默认是“makeinfo”。 |
15 |
泰克斯 从 TeX 源代码制作 TeX dvi 文件的程序;默认为“tex”。 |
16 |
TEXI2DVI 从 Texinfo 源制作 TeX dvi 文件的程序;默认为“texi2dvi”。 |
17 号 |
编织 将 Web 翻译成 TeX 的程序;默认为“编织”。 |
18 |
编织 将 C Web 翻译成 TeX 的程序;默认为“cweave”。 |
19 |
纠纷 将 Web 翻译成 Pascal 的程序;默认为“缠结”。 |
20 |
唐格 将C Web 翻译成C 的程序;默认为“矩形”。 |
21 |
R M 删除文件的命令;默认为“rm -f”。 |
这是一个变量表,其值是上述程序的附加参数。除非另有说明,所有这些的默认值都是空字符串。
先生。 | 变量和描述 |
---|---|
1 |
ARFLAGS 给档案维护程序的标志;默认是“rv”。 |
2 |
ASFLAG 在“.s”或“.S”文件上显式调用时提供给汇编器的额外标志。 |
3 |
CFLAGS 提供给 C 编译器的额外标志。 |
4 |
CXX标志 提供给 C 编译器的额外标志。 |
5 |
联合标志 给予 RCS 联合程序的额外标志。 |
6 |
CPPF标志 给予 C 预处理器和使用它的程序(例如 C 和 Fortran 编译器)的额外标志。 |
7 |
FFLAGS 提供给 Fortran 编译器的额外标志。 |
8 |
玻璃纤维标记 提供给 SCCS get 程序的额外标志。 |
9 |
LDFLAG 当编译器应该调用链接器“ld”时,为编译器提供额外的标志。 |
10 |
LFLAGS 给 Lex 的额外标志。 |
11 |
Y标志 给 Yacc 的额外标志。 |
12 |
PFLAGS 提供给 Pascal 编译器的额外标志。 |
13 |
射频标记 为 Ratfor 程序提供给 Fortran 编译器的额外标志。 |
14 |
林特旗 给予 lint 的额外标志。 |
注意- 您可以使用“-R”或“--no-builtin-variables”选项取消隐式规则使用的所有变量。
您还可以在命令行定义宏,如下所示 -
make CPP = /home/courses/cop4530/spring02