目录
一、概述
对于使用Windows操作系统的程序员,Makefile可能显得有些陌生,因为Windows的集成开发环境(IDE)已经隐式的完成了代码的编译过程。但对于使用Linux系统进行开发的程序员,需要手动完成代码编译,如果掌握Makefile编写,将大幅提高编译效率。
简单来说,Makefile是用来定义程序编译规则的,一个项目工程中的源文件数量庞大,并且按照功能、类型、模块分别存放在不同的目录中。Makefile中的内容就是用于指定哪些文件先编译,哪些后编译,哪些需要重新编译,以及可以通过Makefile实现一些复杂功能,譬如执行操作系统指令。Makefile最大的特点就是可以通过make命令一键实现自动化编译,make命令是用于解释Makefile中指令的命令工具,一般IDE都有这个命令,如Visual C++的nmake、Linux的GNU make、Delphi的make等。
程序的编译就是先将源文件(如.c、.cpp)转换成中间代码文件,Windows中为.obj文件,UNIX中为.o文件,即Object File目标文件,称为编译(Compile)。然后通过链接器将Object File文件合成可执行程序,称为链接(link)。
编译时,编译器需要检查语法是否正确,函数和变量声明是否正确,这里需要告诉编译器头文件所在位置;链接时主要将中间目标文件合成可执行程序,有时由于源文件太多,编译生成的中间目标文件太多,在链接时又需要明确地指出中间目标文件名,很不方便,所以通常给中间目标文件打包,在Windows中称为“库文件(Library File)”即.lib文件,在UNIX中是Archive File,即.a文件。
二、规则
Makefile是指导make命令执行编译和链接动作的文件,编写的基本规则是:
1、如果这个工程未编译过,那么所有.c文件都需要编译并被链接;
2、如果这个工程的某些.c文件被修改,那么只编译被修改的.c文件,并且链接目标文件;
3、如果这个工程的头文件被修改,那么需要编译引用这些头文件的.c文件,并且链接目标文件。
大概的规则结构如下:
target ... : prerequistes ...
command
...
...
target
可以是一个目标文件(Object File),也可以是可执行文件,或者是一个标签(label)。
prerequisties
生成此目标(target)的依赖文件和/或target
command
target要执行的命令
Makefile的核心内容是:prerequisities中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
2.1 简单示例
如果一个工程有3个头文件、8个.c文件,为实现make自动编

最低0.47元/天 解锁文章
1953

被折叠的 条评论
为什么被折叠?



