Makefile – 变量

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.ohello.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
表示汇编编译程序; 默认值:`as’

3

CC
表示C语言编译程序; 默认值:`cc’

4

CO
表示RCS(古老的版本控制工具,现在多用git)的签出工具; 默认值:`co’

5

CXX
表示C++语言编译程; 默认值:`g++’

6

CPP
C预处理程序; 默认值:`$(CC) -E’

7 FC
Fortran编译器; 默认值:`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 Web到C转换程序; 默认值:`ctangle’

21

RM
删除文件程序; 默认值:`rm -f’

下面是表示程序参数的常见变量,如果没有说明,默认值是空字符串:

序号 变量的名称与描述
1 ARFLAGS
打包工具参数; 默认值:`rv’

2

ASFLAGS
汇编编译程序参数

3

CFLAGS
C语言编译程序参数

4

CXXFLAGS
C++语言编译器参数

5

COFLAGS
RCS签出程序参数

6

CPPFLAGS
C预处理器参数

7

FFLAGS
Fortran编译器参数

8

GFLAGS
SCCS get程序参数

9

LDFLAGS
指定编译器的连接器参数, 默认值:`ld’

10

LFLAGS
Lex参数

11

YFLAGS
Yacc参数

12

PFLAGS
Pascal编译器参数

13

RFLAGS
Fortran编译器编译Ratfor程序时的参数

14

LINTFLAGS
lint参数

注意,可以使用“-R”或“–no-builtin-variables”参数取消所有的预定义变量。

还可以在命令行中定义变量,如下所示

make CPP = /home/courses


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载