Makefile中可以使用变量,代表了一个文本字符串,定义好后可以用美元符号$
引用,变量在Makefile中用等号=
定义。
下面是一些例子:
MACROS = -me
PSROFF = groff -Tps
DITROFF = groff -Tdvi
CFLAGS = -O -systype bsd43
LIBS = "-lncurses -lm -lsdl"
MYFACE = ":*)"
特殊变量
有一些预定义的特殊变量:
$@
– 表示要生成的文件的名称。$?
– 表示已更改的依赖项的名称。
例如,有下面的Makefile:
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
表示hello.cpp
。
常用的还有另外2个特殊变量:
$<
– 触发该操作的相关文件的名称$*
– 目标文件和依赖文件共享的前缀,如hello.o
与hello.cpp
共享的前缀是hello
这些变量通常用于.cpp(源文件)生成同名.o(obj)文件:
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
惯例变量
有一些预定义的默认变量,历史原因名称已经约定俗成,可以输入“make -p”打印查看。
这些预定义的变量可分为两类:
- 表示程序名称(如CC)
- 表示程序参数(如CFLAGS)
下面是表示程序名称的常见变量:
序号 | 变量的名称与描述 |
---|---|
1 | AR 表示打包工具; 默认值:`ar’. |
2 |
AS |
3 |
CC |
4 |
CO |
5 |
CXX |
6 |
CPP |
7 |
FC Fortran编译器; 默认值:`f77′ |
8 |
GET |
9 |
LEX |
10 |
YACC |
11 |
LINT |
12 |
M2C |
13 |
PC |
14 |
MAKEINFO |
15 |
TEX |
16 |
TEXI2DVI |
17 |
WEAVE |
18 |
CWEAVE |
19 |
TANGLE |
20 |
CTANGLE |
21 |
RM |
下面是表示程序参数的常见变量,如果没有说明,默认值是空字符串:
序号 | 变量的名称与描述 |
---|---|
1 |
ARFLAGS 打包工具参数; 默认值:`rv’ |
2 |
ASFLAGS |
3 |
CFLAGS |
4 |
CXXFLAGS |
5 |
COFLAGS |
6 |
CPPFLAGS |
7 |
FFLAGS |
8 |
GFLAGS |
9 |
LDFLAGS |
10 |
LFLAGS |
11 |
YFLAGS |
12 |
PFLAGS |
13 |
RFLAGS |
14 |
LINTFLAGS |
注意,可以使用“-R”或“–no-builtin-variables”参数取消所有的预定义变量。
还可以在命令行中定义变量,如下所示
make CPP = /home/courses