Makefile 学习笔记

  • Makefile

格式

表明输出的目标,输出目标的依赖对象和生成目标需要执行的命令

目标 : 前提依赖

『TAB』执行命令

组成

  1. 显式规则

  2. 隐式规则

    ​ make推导出的规则

  3. 变量定义

  4. 文件指示

  5. 注释

执行

读取makefile文件

读入关联文件

初始化变量

递归式执行(执行依赖链上的目标

显式规则

依赖关系

发生依赖关系,执行命令

伪目标

使用.PHONY来标识,可以避免和工作目录下的实际文件名发生冲突

1
2
3
.PHONY
clean:
rm -f *.c

隐含规则

通配符

1
2
%.o : %.c
$(CC) -c %.c -o %.o

文件目录

在链接不同目录下的文件时,需要告知make寻找路径:

使用VPATYH变量

1
2
# make依次按序搜索文件
VPATH = /src : ../inc #不同目录中间用冒号分隔

使用vpath关键字

1
2
3
4
5
6
7
8
# 使用 % 来指定特定文件

# 1 寻找指定目录下的特定文件
vpath %.c dir1 # 寻找dir1下的.c文件
# 2 清除符合特定文件的搜索目录
vapth %.c
# 3 清除所有(由vpath命令)已被设置好的文件搜索目录
vpath

变量

变量声明与使用

在变量声明时,需要对变量进行赋值;在使用时需要使用$(VARNAME)的形式

1
2
3
var = a.c b.c
target : $(var)
# command

变量中的变量

  1. = 替换
  2. := 恒等与(常量),按序声明
  3. ?= 定义未定义过的变量
  4. += 给一个变量追加一个值

自动化变量

  1. $@ 目标文件
  2. $< 第一个依赖文件
  3. $%
  4. $?
  5. $^ 所有的依赖文件
  6. $+
  7. $*

文件指示

函数