参考博客链接:https://blog.csdn.net/weixin_38391755/article/details/80380786
1、makefile的规则:
target ... : prerequisites ...
command
...
...
target:就是一个目标文件,可以是1个.obj中间文件,也可以是exe执行文件。
prerequisites :生成target所需要的文件
command : 生成target所需要执行的命令
2、基础规则:
-
@
、
@、
@、^、$<
- $@:目标文件 $^:所有的依赖文件 $<:第一个依赖文件
- 在Makefile中的命令,必须要以[Tab]键开始。
- patsubst 的功能说明
所以这句就是把所有.c文件名取出,替换为.o文件名 - wildcard 的功能说明
第一版:按照标准格式,列举所有文件的依赖关系![按照标准格式,列举所有文件的依赖关系](https://i-blog.csdnimg.cn/blog_migrate/c89d5e530d877045e152783a8801dc58.png)
第二版:用objects变量来表示所有的.o文件![用objects变量来表示所有的.o文件](https://i-blog.csdnimg.cn/blog_migrate/b222369af50c82a2fada5167b9a7e3b6.png)
第三版:带自动推导功能
- main.o不需要写明main.c,并且不需要写 gcc -c main.c。只需要列举所有依赖的.h头文件即可
第四版:
- ** 原先.h和.c都在同一个目录下,现在把.h和.c文件放入到不同的文件夹路径想:includes、sources中,原MakeFile就无效了 **
- 新的makefile中,用变量记录文件的路径
- TOP_PATH = $(shell pwd) # linux下获取当前文件(makefile)所在的路径
- @ echo $(TOP_PATH) # 输出路径,如果没有加@,会输出2次:/home/admin/桌面/edit/mk4-