[008-Makefile-笔记] Makefile的隐含规则
2016-12-29 23:58
323 查看
隐含规则
为 makefile 提供了重建一类目标文件的通用方法,不需要在 Makefile 中明确地给出重建特定目标文件所需要的细节描述。常见隐含规则
CN.o 自动由 N.c 生成,执行命令为: $(CC) -c $(CPPFLAGS) $(CFLAGS)
C++
N.o 自动由 N.cc 或者 N.C 生成,执行命令为:$(CXX) -c $(CPPFLAGS) $(CFLAGS)
Pascal
N.o 自动由 N.p 创建,执行命令为:$(PC) -c $(PFLAGS)
汇编和需要预处理的汇编程序
N.s 是不需要预处理的汇编源文件,N.S 是需要预处理的汇编源文件。
汇编器为 as 。
N.o 可自动由 N.s 生成,执行命令为:$(AS) $(ASFLAGS)
N.s 可自动由 N.S 生成,C 预编译器 cpp,执行命令为:$(CPP) $(CPPFLAGS)
链接单一的object文件
N 可自动由 N.o 生成,通过C编译器使用链接器(GUN ld),执行命令为:$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)
此规则仅适用:由一个源文件直接产生可执行文件的情况。
隐含变量
命令
AR函数库打包程序,可创建静态库 .a 文档。默认是 ar
AS
汇编程序。默认是 as
CC
C 编译程序。默认是 cc
CXX
C++ 编译程序。默认是 g++
CO
从 RCS 中提取文件的程序。默认是 co
CPP
C程序的预处理器。默认是 $(CC) -E
GET
从 SCCS 中提取文件程序。默认是 get
PC
Pascal 语言编译器。默认是 pc
YACC
Yacc 文法分析器(针对于C程序)。默认命令是 yacc
YACCR
Yacc文法分析器(针对于Ratfor程序)。默认是 yacc -r
MAKEINFO
转换 Texinfo 源文件(.texi)到 Info 文件程序。默认是 makeinfo
RM
删除命令。默认是 rm -f
参数
ARFLAGS执行 AR 命令的命令行参数。默认值是 rv
ASFLAGS
执行汇编语器 AS 的命令行参数
CFLAGS
执行 CC 编译器的命令行参数
CXXFLAGS
执行 g++ 编译器的命令行参数
COFLAGS
执行 co 的命令行参数
CPPFLAGS
执行 C 预处理器 cc -E 的命令行参数
GFLAGS
SCCS get 程序参数
LDFLAGS
链接器参数
PFLAGS
Pascal语言编译器参数
YFLAGS
Yacc文法分析器参数
模式规则
模式规则类似于普通规则。只是在模式规则中,目标名中需要包含有模式字符 %。模式规则的匹配时机如下:- 变量和函数的展开一般发生在读取 makefile 时
- 模式规则中的 % 的匹配和替换发生在 makefile 执行时
示例:
%.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
注意:
1. 一个模式规则中,可以存在多个目标
2. 模式规则在 makefile 中的顺序需要注意,当一个目标文件同时符合多个目标模式时,makefile 将会把第一个目标匹配的模式规则作为它重建的规则
3. 明确规则优先于隐含规则
4. 依赖文件存在或者被提及的规则,优先于使用隐含规则
自动化变量
$@表示规则的目标文件名。
$%
当规则的目标文件是一个静态库文件时,代表静态库的一个成员名
$<
规则的第一个依赖文件名
$?
所有比目标文件更新的依赖文件列表,空格分割
$^
规则的所有依赖文件列表,使用空格分隔。
$+
类似“$^”,但是它保留了依赖文件中重复出现的文件。
相关文章推荐
- 《跟我一起写makefile》(笔记8--makefile中的隐含规则#模式规则#隐含规则变量#自动化变量)
- Makefile完全解析PART9.隐含规则
- Makefile‘混和的隐含和普通规则’错误的解决
- 跟我一起写 Makefile(9)隐含规则
- 跟我一起写makefile-9(隐含规则)
- makefile高级用法--隐含规则
- Makefile 的隐含规则
- Makefile 隐含规则
- Makefile‘混和的隐含和普通规则’错误的解决
- Fedora 编译 RT288X Makefile: *** 混合的隐含和普通规则。 停止。 Makefile: *** mixed implicit and norma
- Makefile: 混合的隐含和普通规则
- Makefile‘混和的隐含和普通规则’错误的解决
- Makefile学习之隐含规则(二)
- Makefile学习之隐含规则(一)
- 跟我一起写Makefile:隐含规则
- Makefile‘混和的隐含和普通规则’错误的解决
- makefile详解 隐含规则 二十四
- 跟我一起写 Makefile(十二) 隐含规则(转)
- gcc -M 选项 以及Makefile隐含规则
- 内核编译错误:Makefile‘混和的隐含和普通规则’错误的解决