您的位置:首页 > 其它

Makefile 中的变量和规则

2015-05-17 15:38 169 查看
隐含变量

内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。在Makefile中、通过命令行参数或者设置系统环境的方式对它进行重定义。无论是用哪种方式,只要make在运行时它的定义有效,make的隐含规则都会使用这些变量。也可以使用“-R”或者“--no-builtin-variables”选项来取消所有的隐含变量(同时会取消所有的隐含规则)

隐含规则中所使用的变量分为两类:

代表一个程序的名字
代表执行这个程序使用的参数

代表命令的变量

变量名 说明
AR函数库打包程序,可创建静态库.a文档。默认是“ar”
AS汇编程序。默认是“as”
CCC编译程序。默认是“cc”
CXXC++编译程序。默认是“g++”
CO从PCS中提取文件的程序。默认是“co”
CPPC程序的预处理器(输出是标准输出设备)。默认是 “$(CC) -E”
FC编译器和预处理Fortran和 Ratfor 源文件的编译器。默认是“f77”
GET从SCCS中提取文件程序。默认是“get”
LEX将Lex语言转变为C或Rafto的程序。默认是“lex”
PCPascal语言编译器。默认是“pc”
YACCYacc语法分析器(针对C程序)。默认命令是“yacc”
YACCRYacc语法分析器(针对Ratfor)。默认是“yacc -r”
MAKEINFO转换Texinfo源文件(.texi)到Info文件程序。默认是“makeinfo”
TEX从TeX源文件创建TeX DVI 文件的程序。默认是“texi2dvi”
WEAVE 转换Web到TeX的程序。默认是“weave”
CWEAVE 转换C Web 到TeX的程序。默认是“cweave”
TANGLE转换Web到Pascal语言的程序。默认是“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 编译器会用到)
FFLAGSFortran 语言编译器“f77”执行的命令行参数(编译Fortran源文件的选项)
GFLAGSSCCS “get”程序参数
LDFLAGS连接器参数
LFLAGSLex语法分析器参数
PFLAGSPascal语言编译器参数
RFLAGSRatfor程序的Fortran编译器参数
YFLAGSYacc语法分析器参数
自动化变量

变量名说明
$@ 表示规则的所有目标文件名
$%当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。如果目标不是静态库文件,其值为空
$<规则的第一个依赖文件名。
$?所有比目标文件新的依赖文件列表,空格分隔。
$^规则的所有依赖文件列表,使用空格分隔。
$+类似“$^”,也是指代所有依赖文件。但是该变量不去除重复的依赖文件。
$*在模式规则和静态模式规则中,代表目标模式中“%”所代表的部分
自定义变量

格式 说明
变量名 = 字符串 递归展开
变量名 := 字符串直接展开
变量名 ?= 字符串当变量在之前没有赋值的情况下才对这个变量赋值
变量名 += 字符串追加方式
规则

Makefile由若干个规则构成,每个规则的格式是

targets(目标) : prerequisites(依赖)

command

伪目标

伪目标不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也可以将一个伪目标称为标签。讲一个目标声明为伪目标的方法是将它作为特殊目标 .PHONY 的依赖。格式如下。

.PHONY : clean

这样目标 clean 就被声明为一个伪目标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐