C语言中的高级工程管理器——Makefile
Make称为工程管理器,就是指管理较多的文件,在刚接触C语言编程的时候接触到的大多是单个的 .c 文件,而在实际项目中,一个工程往往是由若干个 .c 文件来组成的,如果我们想要更高效的去编译,就借助到了Make工程管理器,也就是“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作;Make可以只编译改动的代码文件,而不用完全编译,所以效率较高。
## 是注释
目标文件 :依赖文件
hello.i : hello.c
gcc -E hello.c -o hello.i #gcc前面是Tab键
hello.s : hello.i
gcc -S hello.c -o hello.s #gcc前面是Tab键
hello.o : hello.s
gcc -c hello.c -o hello.o #gcc前面是Tab键
hello : hello.o
gcc hello.o -o hello #gcc前面是Tab键
注意:命令行前面必须是一个“Tab”键,否则编译错误为“ *** missing separator. Stop”
#从终极目标一步步往下找
hello : hello.o
gcc hello.o -o hello.exe #gcc前面是Tab键
hello.o : hello.s
gcc -c hello.c -o hello.o #gcc前面是Tab键
hello.s : hello.i
gcc -S hello.c -o hello.s #gcc前面是Tab键
hello.i : hello.c
gcc -E hello.c -o hello.i #gcc前面是Tab键
可以只编译改动的代码文件,而不用完全编译,所以效率较高。
#代码末尾加关键字: .PHONY:
#能够根据文件时间戳自动发现更新过的文件而减少编译的工作量;
#删除所有文件
clearall:
rm -rf hello.i hello.S hello.o hello
#删除过程文件
clear:
rm -rf hello.i hello.S hello.o
为了makefile的易维护,在makefile中我们可以使用变量。makefile 中的变量也就是一个字符串,理解成C语言中的宏可能会更好。
所以一个升级版的 makefile 就是如下这样
这里要说明一点的是,clear不是一个文件,它只不过是一个动作名字,有点像C语言中的标签一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显的指出这个标签的名字。这样的方法非常有用,我们可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份等等。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
若文章对你有帮助,在页面右下角点个 在看。
最 后
若觉得文章不错,转发分享给更多的朋友。