最详细的教程:
https://blog.csdn.net/weixin_38391755/article/details/80380786
1、预处理: gcc -E project.c -o project.i //生成预处理文件 project.i 宏展开 包含展开
2、编译: gcc -S project.i -o project.S //生成汇编文件 project.S //高级语言转成低级语言
3、汇编: gcc -c project.S -o project.o //生成机器语言 project.o 生成未地址定位的机器码
4、链接: gcc project.o -o project //生成可运行程序project 加载库文件
编译是对.c文件进行操作的, 会自动的去找头文件进行包含。 其中的include会在链接的时候使用。
根据源文件自动产生依赖文件?
$(addprefix src/,foo bar) 返回的结果是“src/foo src/bar”
https://blog.csdn.net/u013216061/article/details/73745717
vpath pattern directories 用于指定搜索目录
https://blog.csdn.net/mcgrady_tracy/article/details/27240139
自动生成依赖关系:https://blog.csdn.net/sinat_29830917/article/details/56479186
@ Makefile中的@通常,make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
https://blog.csdn.net/YEYUANGEN/article/details/3689850
跟我一起写Makefile
https://seisman.github.io/how-to-write-makefile/introduction.html
多文件目录下makefile文件递归执行编译所有C文件
https://www.cnblogs.com/fengliu-/p/10154643.html
https://blog.csdn.net/paulkg12/article/details/88225930
https://www.cnblogs.com/baiduboy/p/6849587.html
$^是所有依赖的文件,$@是目标文件
-fpie pie
https://www.dazhuanlan.com/2019/09/30/5d9146a2ebd07/
https://blog.csdn.net/qu1993/article/details/88871799
https://www.cnblogs.com/fantet/p/4425063.html
https://blog.csdn.net/yyyljw/article/details/101371850
https://blog.csdn.net/u012989012/article/details/80572043
https://blog.csdn.net/wcl199274/article/details/39140459