make中的隐含变量
9.3隐含变量
内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”,这些变量我们可以对它进行修改:在Makefile中,通过命令行参数或者设置系统环境变量的方式来对它进行重定义。无论是哪种方式,只要make在运行时它的定义有效,make的隐含规则都会使用这些变量。当然,也可以使用-R 或—no-builtin-variables选项来取消所有的隐含变量(同时取消了所有的隐含规则)。
隐含规则中所使用的变量(隐含变量)分为两类:1.代表一个程序的名字(例如:“CC”代表了编译器这个可执行程序)。2.代表执行这个程序适用的参数(例如:变量“CFLAGS”),多个参数使用空格分开。当然也允许在程序的名字中包含参数。但是这种方式建议不要使用。对于参数的描述我们应该将它们集中在一个变量中,即就是整个工程存在一个必需的参数,我们也可以把它放置一个特殊命名的变量定义中,通用的代表参数的那个变量的定义对它引用;通过这种方式来实现,而不是将它和所要执行的程序名定义在一个变量中。我们的Makefile要尽量做到清晰、明了、干练的管理一个工程。而不要各个变量之间存在错综复杂的关系!模块化的编程思想也同样适用于我们编写Makefile.
一下是一些作为程序名的隐含变量定义:
AR:函数库打包程序,可创建静态库.a文档,默认是ar.
AS:汇编程序。默认是as.
CC:C编译程序。默认是cc.
CXX:C++编译程序,默认是g++.
CO:从RCS中提取文件的程序。默认是co.
CPP:C程序的预处理器(输出是标准输出设备)。默认是$(CC) –E
FC:编译器和预处理Fortran和Ratfor源文件的编译器,默认是f77.
GET:从SCCS中提取文件程序。默认是get。
LEX:将Lex语言转变为C或Ratfor的程序。默认是lex
PC:Pascal语言编译器。默认是pc。
YACC:Yacc文法分析器(针对C程序)。默认命令是yacc.
YACCR:Yacc文法分析器(针对于Ratfor程序)。默认是yacc –r
MAKEINFO:转换Texinfo源文件(.texi)到Info文件程序。默认是makeinfo.
TEX:从TeX源文件创建TeX DVI文件的程序。默认是tex
TEXI2DVI:从Texinfo源文件创建TeX DVI文件的程序。默认是texi2dvi.
WEAVE:转换Web到TeX的程序。默认是weave。
CWEAVE:转换C Web到TeX的程序。默认是cweave.
TANGLE:转换Web到Passcal语言的程序。默认是tangle.
CTANGLE:转换C Web到C。默认是ctangle。
RM:删除命令。默认是rm –f.
下面的是代表命令执行参数的变量。如果没有给出默认值则默认值为空。
ARFLAGS
执行AR命令的命令行参数。默认值是rv.
ASFLAGS
执行汇编器AS的命令行参数。(当明显的调用.s或.S文件时)
CFLAGS
执行CC编译器的命令行参数(编译.c源文件的选项)。
CXXFLAGS
执行g++编译器的命令行参数(编译.cc源文件的选项)。
COFLAGS
执行co的命令行参数(在RCS中提取文件的选项)。
CPPFLAGS
执行C预处理器 cc –E的命令行参数(C和Fortran编译器会用到)。
FFLAGS
Fotran语言编译器f77执行的命令行参数(编译Fortran源文件的选项)。
GFLAGS
SCCS “get”程序参数。
LDFLAGS
连接器参数。(如:ld)
LFLAGS
Lex文法分析器参数。
PFLAGS
Pascal语言编译器参数。
RFLAGS
Ratfor程序的Fortran编译器参数。
YFLAGS
Yacc文法分析器参数