Mikefile详解

Mikefile的作用:

makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令。

make是一条命令,Makefile是一个文件,两个搭配使用,完成项目的自动化构建。

Makefile 一般格式:

目标:依赖文件

命令

如何编译和链接几个文件,规则是:
1)如果这个工程没有编译过,那么所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么需要编译引用了这几个头文件的C文件,并链接目标程序。

make 是如何工作的:

1、make 会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”
这个文件,并把这个文件作为最终的目标文件。
3、如果 edit 文件不存在,或是 edit 所依赖的后面的 .o 文件的文件修改时间要比 edit 这个文
件新,那么,他就会执行后面所定义的命令来生成 edit 这个文件。
4、如果 edit 所依赖的.o 文件也存在,那么 make 会在当前文件中找目标为.o 文件的依赖性,
如果找到则再根据那一个规则生成.o 文件。(这有点像一个堆栈的过程)
5、当然,你的 C 文件和 H 文件是存在的啦,于是 make 会生成 .o 文件,然后再用 .o 文件
生命 make 的终极任务,也就是执行文件 edit 了。

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]键开始。


.PHONY:

makefile中将.PHONY放在一个目标前就是指明这个目标是伪文件目标,如下:
.PHONY:clean
这里clean目标没有依赖文件,如果执行make命令的目录中出现了clean文件,由于其没有依赖文件,所以它永远是最新的,所以根据make的规则clean目标下的命令是不会被执行的。



你可能感兴趣的:(Linux,Makefile详解,Linux)