版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengfei240/article/details/53890525
隐含规则
为 makefile 提供了重建一类目标文件的通用方法,不需要在 Makefile 中明确地给出重建特定目标文件所需要的细节描述。
常见隐含规则
- C
N.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. 依赖文件存在或者被提及的规则,优先于使用隐含规则
自动化变量
$@
表示规则的目标文件名。
$%
当规则的目标文件是一个静态库文件时,代表静态库的一个成员名
$<
规则的第一个依赖文件名
$?
所有比目标文件更新的依赖文件列表,空格分割
$^
规则的所有依赖文件列表,使用空格分隔。
$+
类似“$^”,但是它保留了依赖文件中重复出现的文件。