make(一)概述

来源:互联网 发布:淘宝牛仔裤好卖吗 编辑:程序博客网 时间:2024/05/14 04:56

一 make概述:

(1)make功能:

*The make utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them.


(2)makefile:to tell make what to do.

*To prepare to use make, you must write a file called the makefile that describes the relationships among files in your program and provides commands for updating each file.

*The make program uses the makefile data base and the last-modification times of the files to decide which of the files need to be updated.


(3)编译规则 :

*如果这个工程没有编译过,那么我们的所有 C 文件都要编译并被链接。 

*如果这个工程的某几个 C 文件被修改,那么我们只编译被修改的 C 文件,并链接目标程序。 
*如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的 C 文件,并链接目标程序。


(4) make怎么工作(How make Processes a Makefle):
*make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make 就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make 根本不理。make 只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。 
*通过上述分析,我们知道,像 clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要 make 执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。 
 

(5)makefile文件的内容:

*Makefile 里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 
 
1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由 Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 
 
2、隐晦规则。由于我们的 make 有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写 Makefile,这是由 make 所支持的。 
 
3、变量的定义。在 Makefile 中我们要定义一系列的变量,变量一般都是字符串,这个有点你 C 语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。 
 
4、文件指示。其包括了三个部分,一个是在一个 Makefile 中引用另一个 Makefile,就像 C语言中的 include 一样;另一个是指根据某些情况指定 Makefile 中的有效部分,就像 C 语言中的预编译#if 一样;还有就是定义一个多行的命令。 
 
5、注释。Makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符,这个就像 C/C++中的“//”一样。如果你要在你的 Makefile 中使用“#”字符,可以用反斜框进行转义,如:“\#”。 
 
*最后,注意,在 Makefile 中的命令,必须要以[Tab]键开始。 


(6)make的执行步骤:

1、读入所有的 Makefile。 
2、读入被 include 的其它 Makefile。 
3、初始化文件中的变量。 
4、推导隐晦规则,并分析所有规则。 
5、为所有的目标文件创建依赖关系链。 
6、根据依赖关系,决定哪些目标要重新生成。 
7、执行生成命令。 


二 make命令:

(1)格式:

*make [-f makefile] [options]...[targets]...

*make也可以单独指定生成makefile中的某个目标。

(2)常用选项:

*-B,--always-make:Unconditonally make all targets。无论是否改变都重新执行make。

*-C dir,--directory=dir:读入当前目录下的makefile。

*-f file,--file=file:读入当前目录下的file文件作为makefile。

*-i,--ignore-errors:忽略所有命令的执行错误。

*-I dir,--include-dir=dir:指定被包含(#include)的makefile所在的目录。

*-n,--just-print:只显示命令,不会执行命令,有利于我们调试我们的makefile。看看我们书写的命令执行起来是什么样子。

*-s:执行时不显示命令。


 

































原创粉丝点击