为什么使用Makefile
在linux下运行C语言源文件需要先使用gcc进行编译,在我们日常学习使用的过程中由于调用的源文件和头文件较少因此在linux命令行下运行不会太过麻烦,但一个大工程,源文件不计其数,其按类型、功能、模块分别放在若干个目录中,而makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
C语言运行的具体过程
预处理
将 .h .c 文件展开形成一个文件。宏定义直接替换 头文件 库文件 形成.i
汇编
汇编实际上指把 . i 文件生成一个汇编代码文件 . s (目标机器指令)
编译
将 . s 文件生成一个 . o 或者 . obj文件
链接
将 . o 文件链接成 . exe文件(可执行文件) . elf文件 (Linux系统下)
Makefile
make是一个命令工具,它解释Makefile makefile是一种全新的脚本语言,有自己的书写格式、关键字、函数中的指令。接下来的笔记即关于makefile的写法。
显示规则
# //注释符
目标文件:依赖文件
例如将hello.c 编译为hello可执行文件的时候可以写为
hello : hello.c
gcc hello.o -o hello
hello.o : hello.s
gcc hello.s -o hello.o
hello.s : hello.i
gcc hello.i -s hello.s
hello.i : hello.c
gcc hello.c -i hello.i
指令的执行顺序和书写顺序相反,因为在Makefile中规定第一个文件是最终目标文件,这就相当于一个递归的过程。执行上述代码的时候会生成四个过程文件。这时候可以调用伪目标指令将删除文件指令写入 . PHONY
.PHONY
clear:
rm -rf hello.o hello.s hello.i
调用这个Makefile可以用make clear