Makefile – Macros

Makefile – Macros

make 程序允许你使用宏,它类似于变量。宏在Makefile中被定义为=对。下面是一个例子

MACROS  = -me
PSROFF  = groff -Tps
DITROFF = groff -Tdvi
CFLAGS  = -O -systype bsd43
LIBS    = "-lncurses -lm -lsdl"
MYFACE  = ":*)"

特殊Macros

在发布目标规则集的任何命令之前,有一些预定义的特殊宏–

  • $@是要做的文件的名称。

  • $? 是被改变的附属文件的名称。

例如,我们可以使用如下的规则 −

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

传统的Macros

有各种默认的宏。你可以通过输入 “make -p “打印出默认值来查看它们。大多数从它们所使用的规则中是非常明显的。

这些预定义的变量,即隐含规则中使用的宏,分为两类。它们是这样的

  • 作为程序名称的宏(如CC)。

  • 含有程序参数的宏(如CFLAGS)。

下面是一些在makefiles的内置规则中作为程序名称使用的常见变量的表格。

序号 变量和描述
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 GET 从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 将Web翻译成TeX的程序;默认为`weave’。
18 CWEAVE 将C语言Web翻译成TeX的程序;默认为`cweave’。
19 TANGLE 将Web翻译成Pascal的程序;默认为`tangle’。
20 CTANGLE 将C语言翻译成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获取程序。
9 LDFLAGS 当编译器需要调用链接器`ld’时,给编译器的额外标志。
10 LFLAGS 给Lex的额外标志。
11 YFLAGS 给Yacc的额外标志。
12 PFLAGS 给予Pascal编译器的额外标志。
13 RFLAGS 给Ratfor程序的Fortran编译器的额外标志。
14 LINTFLAGS 给予lint的额外标志。

注意 - 你可以用’-R’或’-no-builtin-variables’选项取消隐含规则使用的所有变量。

你也可以在命令行中定义宏,如下图所示

make CPP = /home/courses/cop4530/spring02

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程