makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。
在
UNIX 系统中,习惯使用 Makefile 作为 makefile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件。
make程序有助于您在开发大型程序跟踪整个程序,其中部分已经改变,只有那些编译自上次编译的程序,它已经改变了部分。
一个文件,指示程序如何编译和链接程序。makefile文件的默认名称是名副其实的Makefile,但可以指定一个命令行选项的名称。
关于编译阶段
编译一个小的C程序至少需要一个单一的文件.h文件(如适用)。虽然命令执行此任务只需CC file.c中,有3个步骤,以取得最终的可执行程序,如下所示:
编译阶段:所有的C语言代码.c文件中被转换成一个低级语言汇编语言;决策.s文件。
汇编阶段:前阶段所作的汇编语言代码,然后转换成目标代码的代码片段,该计算机直接理解。目标代码文件.o 结束。
链接阶段:编译程序涉及到链接的对象代码的代码库,其中包含一定的“内置”的功能,如printf的最后阶段。这个阶段产生一个可执行程序,默认情况下,这是名为a.out。
![makefile 例子](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
makefile 例子
这是一个例子编译hello程序Makefile。此程序包含三个文件main.cpp,factorial.cpp,hello.cpp。 # Define required macros hereSHELL = /bin/shOBJS = main.o factorial.o hello.oCFLAG = -Wall -gCC = gccINCLUDE =LIBS = -lmhello:$...... 于2013-11-02发表在 Makefile ,阅读86。![Makefile 其他功能](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 其他功能
make递归使用 递归使用的手段使用,make在makefile作为命令。这种技术是非常有用的,当你想要的makefile各种子系统组成一个更大的系统。例如,假设你有一个子目录,子目录都有其自己的...... 于2013-11-02发表在 Makefile ,阅读156。![Makefile 文件重新编译](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 文件重新编译
make 程序是一个智能的实用程序和工作根据在源文件中的变化。如果有四个文件main.cpp,hello.cpp,factorial.cpp和functions.h。这里所有reamining文件是依赖functions.h,main.cpp的是依赖于hello.cpp,...... 于2013-11-02发表在 Makefile ,阅读200。![Makefile include](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile include
makefile include 指令 include指令告诉make暂停读取当前makefile文件和读取一个或多个其它的makefile,然后再继续。该指令是一行在makefile中,看起来像这样: include filenames... 文件名可以包含...... 于2013-11-02发表在 Makefile ,阅读62。![Makefile 指令](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 指令
有好几种指令以不同的形式。让程序可能不支持所有指令。因此,请检查make是否支持指令,我们这里解释。 GNU make支持这些指令 条件指令 条件的指令 ifeq指令开始的条件,指定的条件...... 于2013-11-02发表在 Makefile ,阅读90。![Makefile 自定义后缀规则](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 自定义后缀规则
就其本身而言,make已经知道,为了创建一个 .o文件,就必须使用 cc-c相应的c文件。 建成MAKE这些规则,可以利用这一点来缩短Makefile。如果仅仅只是表示 .h 文件的 Makefile依赖线,依赖于...... 于2013-11-02发表在 Makefile ,阅读132。![Makefile 定义规则](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 定义规则
一个Makefile目标规则的一般语法 target [target...] : [dependent ....] [ command ...] 方括号中的项是可选的,省略号是指一个或多个。注意标签,每个命令前需要。 下面给出一个简单的例子,定义...... 于2013-11-02发表在 Makefile ,阅读189。![Makefile 宏](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 宏
make程序允许您使用宏,这是类似的变量。 = 一对一个Makefile中定义的宏。例如: MACROS= -mePSROFF= groff -TpsDITROFF= groff -TdviCFLAGS= -O -systype bsd43LIBS = -lncurses -lm -lsdlMYFACE = :*) 特殊的宏 目标规则...... 于2013-11-02发表在 Makefile ,阅读117。![Makefile 定义依赖性](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)
Makefile 定义依赖性
这是很常见的,最终的二进制文件将依赖于各种源代码和源代码的头文件。依存关系是重要的,因为他们告诉对任何目标的源。请看下面的例子 hello: main.o factorial.o hello.o$(CC) main.o fact...... 于2013-11-02发表在 Makefile ,阅读63。![为什么需要Makefile?](http://static.oschina.net/uploads/img/201311/02213040_UGip.gif)