您的位置:首页 > 其它

[008-Makefile-笔记] Makefile的隐含规则

2016-12-29 23:58 323 查看

隐含规则

为 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. 依赖文件存在或者被提及的规则,优先于使用隐含规则

自动化变量

$@

表示规则的目标文件名。

$%

当规则的目标文件是一个静态库文件时,代表静态库的一个成员名

$<

规则的第一个依赖文件名

$?

所有比目标文件更新的依赖文件列表,空格分割

$^

规则的所有依赖文件列表,使用空格分隔。

$+

类似“$^”,但是它保留了依赖文件中重复出现的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefile