Makefile - 宏

make 允许你使用类似变量的宏。宏在 Makefile 中使用 名称 = 值 的形式来定义。例如

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

特殊的宏

在运行任何目标集(target rule set)中的指令之前,有一些预定义的特殊宏 -

  • $@ 要创建的文件的名称。

  • $? 是被更改的对应文件名。

例如,在下列场景中我们可以使用如下规则:

hello: main.cpp hello.cpp factorial.cpp
    $(CC) $(CFLAGS) $? $(LDFLAGS) -o $@

或者 −

hello: main.cpp hello.cpp factorial.cpp
    $(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@

在这个例子中,像 $(CC) $(CFLAGS) $? $(LDFLAGS) -o $@ 这样的操作行应该在行首输入一个制表符 (\t) ,否则 make 会报错。 其中的 $@ 代表 hello 同时 $? 或者 [email protected] 则代表所有已修改源文件。

同时默认规则中还有另外两个特殊的宏。他们分别是 -

  • $< 触发操作的相关文件的名称。

  • $* 由目标文件和依赖文件共享的前缀。

常见的隐式规则是用于构建 .cpp(源文件)之外的 .o(对象)文件。

.cpp.o:
    $(CC) $(CFLAGS) -c $<

或者 −

.cpp.o:
    $(CC) $(CFLAGS) -c $*.c

常规宏

有各种默认的宏。你可以通过 “make -p” 命令看到他们。大多数的常规宏都是见名知意。

这些预定义变量(即隐式规则中使用的宏)分为两类 -

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

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

以下是一些用作 Makefile 内置规则中程序名称的常用变量表。

AR 档案保存程序;默认是`ar'。
AS 编译汇编文件的程序;默认是 `as'。
CC 编译 C 语言文件的程序;默认是 `cc'.
CO Program for checking out files from RCS; default is `co'.
CXX 编译 C++ 文件的程序; 默认是 `g++'.
CPP 运行 C 预处理器并输出到当前输出流的程序; 默认是 `$(CC) -E'.
FC Program for compiling or preprocessing Fortran and Ratfor programs; default is `f77'.
GET Program for extracting a file from SCCS; default is `get'.
LEX Program to use to turn Lex grammars into source code; default is `lex'.
YACC Program to use to turn Yacc grammars into source code; default is `yacc'.
LINT Program to use to run lint on source code; default is `lint'.
M2C Program to use to compile Modula-2 source code; default is `m2c'.
PC 编译 Pascal 的程序;默认值是 `pc'。
MAKEINFO Program to convert a Texinfo source file into an Info file; default is `makeinfo'.
TEX Program to make TeX dvi files from TeX source; default is `tex'.
TEXI2DVI Program to make TeX dvi files from Texinfo source; default is `texi2dvi'.
WEAVE 将 Web 转化为 TeX 的程序;默认值是 `weave'。
CWEAVE 将 C Web 转换为 TeX 的程序;默认值是 `cweave'。
TANGLE 将 Web 转化为 Pascal 的程序;默认值是 `tangle'。
CTANGLE 将 C Web 转换为 C 的程序;默认值是 `ctangle'。
RM 删除文件的命令;默认是 `rm -f'.

这是一个变量表,其值是上述程序的附加参数。除非另有说明,否则所有这些变量的默认值都是空字符串。

ARFLAGS Flags to give the archive-maintaining program; default is `rv'.
ASFLAGS Extra flags to give to the assembler when explicitly invoked on a `.s' or `.S' file.
CFLAGS 传递给 C 编译器的额外 flag。
CXXFLAGS 传递给 C 编译器 的额外 flag。
COFLAGS Extra flags to give to the RCS co program.
CPPFLAGS Extra flags to give to the C preprocessor and programs, which use it (such as 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

results matching ""

    No results matching ""