"); //-->
#概述
什么是makefile? 或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为
你做了这个工作, 但我觉得要作一个好的和professional的程序员, makefile还是要懂. 这就好
像现在有这么多的HTML的编辑器, 但如果你想成为一个专业人士, 你还是要了解HTML的标识的含
义. 特别在Unix下的软件编译, 你就不能不自己写makefile了, 会不会写makefile, 从一个侧面
说明了一个人是否具备完成大型工程的能力.
因为, makefile关系到了整个工程的编译规则. 一个工程中的源文件不计数, 其按类型, 功
能, 模块分别放在若干个目录中, makefile定义了一系列的规则来指定, 哪些文件需要先编译,
哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作, 因为makefile就
像一个Shell脚本一样, 其中也可以执行操作系统的命令.
makefile带来的好处就是----"自动化编译", 一旦写好, 只需要一个make命令, 整个工程完
全自动编译, 极大的提高了软件开发的效率. make是一个命令工具, 是一个解释makefile中指令
的命令工具, 一般来说, 大多数的IDE都有这个命令, 比如: Delphi的make, Visual C++的make,
Linux下GNU的make. 可见, makefile都成为了一种在工程方面的编译方法.
#关于程序的编译和链接
一般来说, 无论是C, C++, 还是pas, 首先要把源文件编译成中间代码文件, 在Windows下也
就是.obj文件, UNIX下是.o文件, 即Object File, 这个动作叫做编译(compile). 然后再把大量
的Object File合成执行文件, 这个动作叫作链接(link).
编译时, 编译器需要的是语法的正确, 函数与变量的声明的正确. 对于后者, 通常是你需要
告诉编译器头文件的所在位置(头文件中应该只是声明, 而定义应该放在C/C++文件中),只要所有
的语法正确, 编译器就可以编译出中间目标文件. 一般来说, 每个源文件都应该对应于一个中间
目标文件(O文件或是OBJ文件).
链接时, 主要是链接函数和全局变量, 所以,我们可以使用这些中间目标文件(O文件或是OBJ
文件)来链接我们的应用程序.链接器并不管函数所在的源文件,只管函数的中间目标文件(Object
File), 在大多数时候, 由于源文件太多, 编译生成的中间目标文件太多,而在链接时需要明显地
指出中间目标文件名, 这对于编译很不方便, 所以, 我们要给中间目标文件打个包,在Windows下
这种包叫"库文件"(Library File), 也就是.lib文件, 在UNIX下, 是Archive File, 也就是.a文
件.
总结一下, 源文件首先会生成中间目标文件, 再由中间目标文件生成执行文件. 在编译时,
编译器只检测程序语法, 和函数, 变量是否被声明, 如果函数未被声明, 编译器会给出一个警告
但可以生成Object File. 而在链接程序时, 链接器会在所有的Object File中找寻函数的实现,
如果找不到, 那到就会报链接错误码(Linker Error), 在VC下, 这种错误一般是: Link 2001 错
误, 意思说是说, 链接器未能找到函数的实现.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。