Linux系统编程(三)MakeFile项目管理

本文详细解释了Makefile的工作原理,包括如何定义规则、依赖关系、目标文件生成,以及使用wildcard、patsubst等函数、自动变量、模式规则和静态模式规则。还介绍了伪目标和如何传递参数以定制Makefile行为。
摘要由CSDN通过智能技术生成

命名:makefile / Makefile

工作原理(为了不在每次编译的时候要把所有文件都重新编译一次,可以先将文件生成为.o文件):

  • 若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件(依赖条件如果不存在,找寻新的规则去产生依赖)
  • 检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任一个被更新,则目标必须更新(目标的时间必须晚于依赖条件的时间,否则更新目录)

1. 一个规则

目标:依赖
   (一个tab缩进)命令
如:add.o:add.c
   (一个tab缩进) gcc -Wall -g -c add.c -o add.o
目标:最终要生成的目标文件(伪目标除外)
依赖:目标文件由哪些文件生成
命令:通过执行该命令由依赖文件生成目标


默认终极目标是第一条规则的目标
ALL:a.out #ALL-->指定终极目标
Makefile中的其它规则一般都是为第一条规则服务的

2. 两个函数

src = $(wildcard ./*.c)
	找到当前目录下所有后缀为.c的文件。将文件名组成列表,赋值给src  src = div1.c sub.c add.c

obj = $(patsubst %.c, %.o, $(src))
	把src变量里所有后缀为.c的文件替换成.o;将参数3中,包含参数1的部分,替换为参数2;$()是取变量的语法    obj = div1.o sub.o add.o
clean: #没有依赖
   -rm -rf $(obj) a.out #第一个“-”:作用是,出错依然执行,删除不存在文件时,不报错。顺序执行结束。
make clean -n # -n -->指的是“模拟”执行一次clean下的命令,并没有真的执行

3. 三个自动变量

$@ #在规则的命令中,表示规则中的目标
$^ #在规则的命令中,表示所有依赖条件
$< #在规则的命令中,表示第一个依赖条件;

4. 模式规则(为了方便扩展程序)

%.o:%.c
   gcc -c $< -o $@ 	
   	$<:如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。

模式规则

5. 静态模式规则(查找对应的依赖条件列表)

$(obj):%.o:%.c
   gcc -c $< -o $@

静态模式规则

6. 伪目标(防止目录下的文件影响MakeFile的指令判断)

  .PHONY: clean ALL

伪目标

7. 添加参数

make -f m6 # 使用m6文件执行make指令

8. 示例


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值