make/Makefile

项目构建

✳️ 1.多文件.h .cpp先编译哪个程序
2.链接需要哪些库?
3.库和头文件等在哪里找?
4.整个项目结构,该如何为何?

将几个文件一起编译(Makefile)

make(命令)/Makefile(文件)

✳️make是一个命令
✳️Makefile是一个文件-----➡️里面有 依赖关系
依赖方法
只要将依赖关系与依赖方法都表明就可以生成可执行程序

步骤

✳️首先创建一个文件:Makefile
1.写依赖关系:要形成的可执行程序mytest->mytest.c
2.写依赖方法:gcc mytest.c -o mytest

✳️在Makefile中输入内容:
构建项目
第一步a.我要执行的可执行程序文件(目标文件):源文件(依赖文件列表)
第二步b.(换行后)tab键开头➕gcc mytest.c -o mytest
第三步c.然后在自己xshell命令行界面,输入命令:make—➡️便形成了可执行程序mytest
d.✳️清理项目
第一步:.PHONY:clean
(.PHONY是Makefile的关键字;写法:.PHONY:➕伪目标)
第二步:clean:
(只不过clean没有依赖列表,相当于标签是一个孤儿)
第三步:tab键➕rm -rf mytest
(依赖方法前面必须以tab键开头!)

e.然后在自己xshell命令行界面,输入命令:make clean–➡️便会清理mytest可执行文件在这里插入图片描述

为什么输入make只形成第一个目标文件(clean没有执行)

❓为什么按make默认只帮我们形成mytest目标文件而clean目标文件没有形成?
答:Makefile至顶向下的时候形成我们的目标文件时候,他可以根据你的需求形成多个目标文件。那么为什么只执行你第一个mytest而不是clean呢?没错就是因为你的顺序导致的(若将clean写在前面,mytest写在后面,make也只会生成clena,而mytest也需要你输入make mytest才行)
🌟Makefile在执行的时候只会从上到下的扫描,默认只会形成第一个目标文件,执行该依赖关系的依赖方法!;

".PHONY:"是什么呢?

✳️.PHONY: 是Makefile语法格式的一个关键字,凡是被他修饰的目标,比如说clean,表明**“总是被执行的!”**

什么是总是不被执行呢?

✳️我们执行make的时候,多次执行make命令后,貌似只有第一帮我们形成目标文件mytest(后续make命令只会提醒我们已经是最新的可执行程序了);

Makefile是如何识别我的exe/bin是新的还是旧的呢

✳️我们输入命令:stat mytest请添加图片描述
✳️会有三个时间:Access:因为我们访问的频率最高,若要改变则操作系统要真真切切去修改文件的属性,文件的属性在磁盘上也是数据,若要改变则一定会有大量文件属性需要被改,一直更新Acess时间,然后把数据刷新到磁盘上,是一个慢效率的事情;具体改变的策略要交给版本
Modify:如果是文件内容改变则是Modify时间改变
Change:如果是文件属性改变则是Change时 间改变

✳️先有了源代码,后面才会有mytest目标文件,则在时间轴上mytest.c时间一定在它前面,所以若mytest的时间在mytest.c的后面,则肯定不需要重新生成目标文件mytest;若mytest.c修改了,则mytest.c的时间更新了肯定比目标文件mytest的时间更新,则按make命令则会再重新生成mytest目标文件

什么是总被执行呢?

✳️若我们也让mytest也被.PHONY:修饰时,我们多次输入make命令,他都会重新给我们生成mytest;

多个文件的编译

第一步:hello:main.o test.o—➡️有没有这两个文件呢?没有的话Mackfile会继续向下根据你Makefile剩余的依赖关系和依赖方法先形成main.o再形成test.o
第二步:main.o:main.c
gcc -c main.c (就算不写-o main.o也会形成同名.o)
第三步:test.o:test.c
gcc -c test.c -o test.o
第四步:.PHONY:clean
第五步:clean:
第六步:rm -rf .o-----➡️“”通配符,会自动锁定当前路径下.o的所有文件在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值