Makefile 中的变量和规则
2015-05-17 15:38
169 查看
隐含变量
内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。在Makefile中、通过命令行参数或者设置系统环境的方式对它进行重定义。无论是用哪种方式,只要make在运行时它的定义有效,make的隐含规则都会使用这些变量。也可以使用“-R”或者“--no-builtin-variables”选项来取消所有的隐含变量(同时会取消所有的隐含规则)
隐含规则中所使用的变量分为两类:
代表一个程序的名字
代表执行这个程序使用的参数
代表命令的变量
命令参数的变量。没有给出默认值的则默认值为空
自动化变量
自定义变量
规则
Makefile由若干个规则构成,每个规则的格式是
targets(目标) : prerequisites(依赖)
command
伪目标
伪目标不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也可以将一个伪目标称为标签。讲一个目标声明为伪目标的方法是将它作为特殊目标 .PHONY 的依赖。格式如下。
.PHONY : clean
这样目标 clean 就被声明为一个伪目标。
内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。在Makefile中、通过命令行参数或者设置系统环境的方式对它进行重定义。无论是用哪种方式,只要make在运行时它的定义有效,make的隐含规则都会使用这些变量。也可以使用“-R”或者“--no-builtin-variables”选项来取消所有的隐含变量(同时会取消所有的隐含规则)
隐含规则中所使用的变量分为两类:
代表一个程序的名字
代表执行这个程序使用的参数
代表命令的变量
变量名 | 说明 |
AR | 函数库打包程序,可创建静态库.a文档。默认是“ar” |
AS | 汇编程序。默认是“as” |
CC | C编译程序。默认是“cc” |
CXX | C++编译程序。默认是“g++” |
CO | 从PCS中提取文件的程序。默认是“co” |
CPP | C程序的预处理器(输出是标准输出设备)。默认是 “$(CC) -E” |
FC | 编译器和预处理Fortran和 Ratfor 源文件的编译器。默认是“f77” |
GET | 从SCCS中提取文件程序。默认是“get” |
LEX | 将Lex语言转变为C或Rafto的程序。默认是“lex” |
PC | Pascal语言编译器。默认是“pc” |
YACC | Yacc语法分析器(针对C程序)。默认命令是“yacc” |
YACCR | Yacc语法分析器(针对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 编译器会用到) |
FFLAGS | Fortran 语言编译器“f77”执行的命令行参数(编译Fortran源文件的选项) |
GFLAGS | SCCS “get”程序参数 |
LDFLAGS | 连接器参数 |
LFLAGS | Lex语法分析器参数 |
PFLAGS | Pascal语言编译器参数 |
RFLAGS | Ratfor程序的Fortran编译器参数 |
YFLAGS | Yacc语法分析器参数 |
变量名 | 说明 |
$@ | 表示规则的所有目标文件名 |
$% | 当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。如果目标不是静态库文件,其值为空 |
$< | 规则的第一个依赖文件名。 |
$? | 所有比目标文件新的依赖文件列表,空格分隔。 |
$^ | 规则的所有依赖文件列表,使用空格分隔。 |
$+ | 类似“$^”,也是指代所有依赖文件。但是该变量不去除重复的依赖文件。 |
$* | 在模式规则和静态模式规则中,代表目标模式中“%”所代表的部分 |
格式 | 说明 |
变量名 = 字符串 | 递归展开 |
变量名 := 字符串 | 直接展开 |
变量名 ?= 字符串 | 当变量在之前没有赋值的情况下才对这个变量赋值 |
变量名 += 字符串 | 追加方式 |
Makefile由若干个规则构成,每个规则的格式是
targets(目标) : prerequisites(依赖)
command
伪目标
伪目标不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也可以将一个伪目标称为标签。讲一个目标声明为伪目标的方法是将它作为特殊目标 .PHONY 的依赖。格式如下。
.PHONY : clean
这样目标 clean 就被声明为一个伪目标。
相关文章推荐
- Makefile: Makefile中的变量数据库和隐含规则
- Makefile自动化变量与模式规则
- Makefile常用变量和规则备忘
- 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用!
- 《跟我一起写makefile》(笔记8--makefile中的隐含规则#模式规则#隐含规则变量#自动化变量)
- Makefile十五隐含规则的变量
- 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用
- makefile预定义变量、自动变量、隐式规则、模式规则、make命令选项
- Makefile十六之模式规则及其自动化变量
- Makefile文件变量的定义规则
- Makefile 规则 , 规则中的变量
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序
- makefile 变量赋值规则
- linux开发工具--Makefile(1) 简单的Makefile规则和Makefile自动变量
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序
- 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用!
- 跟我一起写Makefile(14)--- 隐含规则(命令变量+命令参数变量+定义模式规则+自动化变量+模式匹配+)
- Makefile 隐含规则,模式规则,常见变量
- Makefile隐含规则和用到的默认变量
- make和Makefile中的规则和变量