在GCC编译中知道
编译流程:
预处理->编译->汇编->链接
每个编译的环节都会产生不同类型的文件,对于C程序:
预处理 -> .i文件 (-E)
编译 -> .s文件 (-S)
汇编 -> .o文件 => .a文件 .so文件 (-c)
链接 -> 可执行文件
每个环节都有自己的依赖,即若想生成.o文件,那么需要.s、.i、.c文件。
那么 对于庞大的工程项目,比如内核源码中存在成千上万个源文件,那么编译的时候,如何实现自动化编译,即源头文件与头文件或者静、动态库之间找到彼此的依赖关系进行编译,最终生成目标文件。
大多数的Winodws的程序员不需要深入了解自动化编译流程,因为Windows的IDE(Integrated Development Environment)已经做了相关的工作,比如VC,VB等。而Linux下没有这样的IDE,通常需要程序员做用脚本自行书写。
要做一个好的professional程序员,尤其是linux程序员,至少需要懂得设计该脚本 - Makefile。
Makfile是一种纯文本的编译脚本,在其中可以指定需要编译哪些文件,哪些先编译,哪些后编译