webserver中:MakeFile

📕作者简介:热编程的贝贝,致力于C/C++、Java、Python等多编程语言,热爱跑步健身,喜爱音乐的一位博主。
📗本文收录于贝贝的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏深度学习、目标检测系列等,大家有兴趣的可以看一看
📙C++零基础入门系列,Web入门篇系列正在发展中,喜欢Python、C++的朋友们可以关注一下哦!
📗如有需要此项目工程,请评论区留言哦 也可联系作者微信 Qwe1398276934

一个 Makefile 文件中可以有一个或者多个规则
目标 ...: 依赖 ...
命令(Shell 命令)
...
目标:最终要生成的文件(伪目标除外)
依赖:生成目标所需要的文件或是目标
命令:通过执行命令对依赖操作生成目标(命令前必须 Tab 缩进)
app: sub.c add.c mult.c div.c main.c
gcc sub.c add.c mult.c div.c main.c -o app
命令在执行之前,需要先检查规则中的依赖是否存在
如果存在,执行命令
如果不存在,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的,
如果找到了,则执行该规则中的命令
app:sub.o add.o mult.o div.o main.o
gcc sub.o add.o mult.o div.o main.o -o app
sub.o:sub.c
gcc -c sub.c -o sub.o
add.o:add.c
gcc -c add.c -o add.o
mult.o:mult.c
gcc -c mult.c -o mult.o
div.o:div.c
gcc -c div.c -o div.o
main.o:main.c
gcc -c main.c -o main.o
检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间
如果依赖的时间比 目标的时间晚,需要重新生成目标
如果依赖的时间比目标的时间早,目标不需要更新,对应规则中的命令不需要被
执行
如果不更改文件, make 输出
make: “app”已是最新。
更改了 main.c 文件,则输出
gcc -c main.c -o main.o
gcc sub.o add.o mult.o div.o main.o -o app
自定义变量
变量名 = 变量值
var=hello
预定义变量
AR : 归档维护程序的名称,默认值为 ar
CC : C 编译器的名称,默认值为 cc
CXX : C++ 编译器的名称,默认值为 g++
$@ : 目标的完整名称
$< : 第一个依赖文件的名称
$^ : 所有的依赖文件
获取变量的值
$( 变量名 )
app:main.c a.c b.c
gcc -c main.c a.c b.c
# 自动变量只能在规则的命令中使用
app:main.c a.c b.c
$(CC) -c $^ -o $@
$(var)
add.o:add.c
gcc -c add.c
div.o:div.c
%.o:%.c
gcc -c div.c
- %: 通配符,匹配一个字符串
sub.o:sub.c
- 两个 % 匹配的是同一个字符串
gcc -c sub.c
%.o:%.c
mult.o:mult.c
gcc -c $< -o $@
gcc -c mult.c
main.o:main.c
gcc -c main.c
$(wildcard PATTERN...)
功能:获取指定目录下指定类型的文件列表
参数: PATTERN 指的是某个或多个目录下的对应的某种类型的文件,如果有多
个目录,一般使用空格间隔
返回:得到的若干个文件的文件列表,文件名之间使用空格间隔
示例:
$(wildcard *.c ./sub/*.c)
返回值格式 : a.c b.c c.c d.c e.c f.c $(patsubst <pattern>,<replacement>,<text>)
功能:查找 <text> 中的单词 ( 单词以“空格”、“ Tab ”或“回车”“换行”分隔 ) 是否符合
模式 <pattern> ,如果匹配的话,则以 <replacement> 替换。
<pattern> 可以包括通配符 `%` ,表示任意长度的字串。如果 <replacement>
中也包含 `%` ,那么, <replacement> 中的这个 `%` 将是 <pattern> 中的那个 %
所代表的字串。 ( 可以用 `\` 来转义,以 `\%` 来表示真实含义的 `%` 字符 )
返回:函数返回被替换过后的字符串
示例:
$(patsubst %.c, %.o, x.c bar.c)
返回值格式 : x.o bar.o
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
找依赖,找 sub.o 如果没有找到,则找到第二条 %.o:%.c 通用模式匹配,编译出 sub.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c,%.o,$(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
默认执行第一个规则 ,如果想 执行其他需要指定 make clean
src=$(wildcard ./*.c)
objs=$(patsubst %.c,%.o,$(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
clean:rm $(objs) -f

定义为伪目标,就不会生成特定的文件

.PHONY:clean
clean:
rm $(objs) -f

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechMasterPlus

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值