Linux下make/makefile的介绍

概念

make/makefile 用于自动化项目的构建
make是命令,makefile是文件

1.先见一见make/makefile

makefile文件中
在这里插入图片描述
之后再输入make,可以得到test.exe
在这里插入图片描述

2.谈make命令和makefile的依赖关系和依赖方法

在这里插入图片描述
在世界上,要完成任何一件事,都是依赖关系和依赖方法的关系
eg:
依赖关系就像你和你爸爸关系
依赖方法:你要生活费
能要到生活费,首先因为你和你爸爸的关系,其次依赖方法正确,你是问他要生活费而不是让他给你写作业。

3.详细学习makefile的基本语法

在这里插入图片描述
实践一个例子
在这里插入图片描述
前两行构建项目,下面在写一个用来清理项目的依赖关系
细节1:依赖关系必须存在,依赖列表可以为空(就像这的clean)
细节2:依赖方法可以是任意Shell指令
细节3:clean目标,只是利用make的自动推导能力,让他执行了rm命令
在构建工程的视角,看起来就是清理项目。
细节四:make命令后面可以跟目标名
在这里插入图片描述
后面跟谁,就解析谁的依赖关系和依赖方法
但我们之前构建test.exe只写了make
在这里插入图片描述
这是因为make默认只会推导第一个依赖关系对应的依赖链

.PHONY作用是声明一个伪目标
在这里插入图片描述
为什么gcc无法二次编译老文件
时间轴
在这里插入图片描述
如果test.c并没有任何改变他就不可能跑到test.exe的前面,再次编译它毫无意义。
那.PHONY是怎么做到重复编译的:
让gcc忽略MOD时间对比新旧

介绍一下文件的三种时间

在这里插入图片描述
分别是Access,Modify,Change三种时间
1.Modify
修改文件内容时间(修改文件内容同样会影响文件属性时间)
2.Change
修改文件属性时间
3.Access
访问时间
但不是每次访问都会修改时间,这样会导致效率低下,
所以当访问次数达到一定次数后才会修改

拓展语法

BIN=proc.exe # 定义变量
CC=gcc
#SRC=$(shell ls *.c) # 采⽤shell命令⾏⽅式,获取当前所有.c⽂件名
SRC=$(wildcard *.c) # 或者使⽤ wildcard 函数,获取当前所有.c⽂件名
OBJ=$(SRC:.c=.o) # 将SRC的所有同名.c 替换 成为.o 形成⽬标⽂件列表
LFLAGS=-o # 链接选项
FLAGS=-c # 编译选项
RM=rm -f # 引⼊命令
$(BIN):$(OBJ)
@$(CC) $(LFLAGS) $@ $^ # $@:代表⽬标⽂件名。 $^: 代表依赖⽂件列表
@echo "linking ... $^ to $@"
%.o:%.c # %.c 展开当前⽬录下所有的.c。 %.o: 同时展开同.o
@$(CC) $(FLAGS) $< # %<: 对展开的依赖.c⽂件,⼀个⼀个的交给gcc。
@echo "compling ... $< to $@" # @:不回显命令
.PHONY:clean
clean:
$(RM) $(OBJ) $(BIN) # $(RM): 替换,⽤变量内容替换它
.PHONY:test
test:
@echo $(SRC)
@echo $(OBJ)

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值