【Linux】Make和Makefile快速入门


风晓
风晓 2024-01-07 11:48:08 66931 赞同 0 反对 0
分类: 资源
我们今天的主题----【Linux】Make和Makefile快速入门
⭐浅谈Make和Makefile
什么是make
 
        linux中make是一个构建工具,用于自动化编译和构建软件项目。它的作用是允许开发人员管理和维护复杂的软件项目,自动化编译过程并生成可执行文件。软件项目通常由多个源代码文件和依赖项组成。每个文件都需要编译为目标文件,然后将这些目标文件链接在一起生成最终的可执行文件,使用make工具可以简化这个过程,因为它会根据一组规则自动检测并构建项目的不同部分。
 
什么是makefile
 
        在linux中,makefile是一个工程文件的编译规则,描述了整个工程的编译和链接等规则;其中包含了哪些文件需要编译,哪些文件不需要编译,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重建等等。
 
总结
 
简单的来讲:make是指令而Makefile是一个文件
 
⭐编写Makefile
编写一个Makefile能细节到空格一个也不能多也一个也不能少的地步。
 
这里我们先创建两个文件:
 
test.c:
 
 
Makefile:(makefile也可以)
 
 
 我们这里编写test.c和Makefile:
 
Makefile:(makefile也可以)
test:test.c
gcc test.c -o test
 
.PHONY:clean
clean:
rm -f test
这里我们不讲解里面的内容,后面会详细介绍的😬😬,摁住大家躁动的心
 
注意事项:
 
makefile 的文件名必须是 makefile/Makefile,不能是其他名称,否则 make 识别不了
依赖文件可以有多个,也可以没有
依赖方法必须以 [Tab] 键开头,特别注意不能是四个空格
⭐make原理
🌙make的使用
在Linux下,输入 make 命令后,make 会在当前目录下找寻名为 "Makefile/makefile" 的文件
 
如果找到,它会把文件中的第一个目标文件作为最终的目标文件
 
 
 
如果找不到,就打印提示信息。
 
 
 
🌙make的依赖性
        不知道大家还记得我们编译的过程中有四大步骤:预处理,编译,汇编,连接。这四个步骤严格按照make的依赖性的,一层又一层地去找文件的依赖关系,直到最终编译出最开始我们需要的目标文件。
 
咱们先上代码后分析:
 
test:test.o
gcc test.o -o test
test.o:test.s
gcc -c test.c -o test.o
test.s:test.i
gcc -S test.i -o test.s
test.i:test.c
gcc -E test.c -o test.i
 
.PHONY:clean
clean:
rm -f test.i test.s test.o test
代码分析:
 
 
 
运行结果:
 
 
 
🌙文件清理
文件清理指令:
 
make clean
会用 .PHONY 将其设置为伪目标:
 
.PHONY:clean
clean:
rm -f test.i test.s test.o test
运行结果:
 
 
 
注意事项:
 
🌙知识拓展
Makefile中还有一些自动化变量,常用的有下面这些:
 
自动化变量 说明
$@ 规则的目标
$< 规则的第一个依赖
$? 所有比目标新的依赖的列表
$^ 所有的依赖的列表,会自动去重
 

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
国产操作系统环境搭建(内含镜像资源链接和提取码)  97
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  93
分享几个在日常办公中可以用到的shell脚本  88
bat脚本生成查看电脑配置\硬件信息  83
以openkylin为例编译安装内核  81
常见系统问题及其解决方法  81
分享解决宏碁电脑关机时自动重启的方法  78
loadrunner常见问题整理  75
统信uosboot区分未挂载导致更新备份失败  73
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  71
最近下载排行榜
国产操作系统环境搭建(内含镜像资源链接和提取码) 0
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
分享几个在日常办公中可以用到的shell脚本 0
bat脚本生成查看电脑配置\硬件信息 0
以openkylin为例编译安装内核 0
常见系统问题及其解决方法 0
分享解决宏碁电脑关机时自动重启的方法 0
loadrunner常见问题整理 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
作者收入月榜
1

prtyaa 收益401.13元

2

哆啦漫漫喵 收益253.43元

3

zlj141319 收益238.36元

4

IT-feng 收益219.97元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.2元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!