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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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. 依赖文件存在或者被提及的规则,优先于使用隐含规则

自动化变量

$@
表示规则的目标文件名。

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

$<
规则的第一个依赖文件名

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

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

$+
类似“$^”,但是它保留了依赖文件中重复出现的文件。

猜你喜欢

转载自blog.csdn.net/pengfei240/article/details/53890525
今日推荐