makefile 基础学习
今天主要来记录一下makefile的学习。
makefile 规则:
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个文件夹中,makefile定义了一系列的规则来指定,哪些文件须要先编译,哪些文件须要后编译,哪些文件须要又一次编译,甚至于进行更复杂的功能操作,由于makefile就像一个Shell脚本一样,当中也能够运行操作系统的命令。
makefile带来的长处就是——“自己主动化编译”,一旦写好,仅仅须要一个make命令,整个工程全然自己主动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比方:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
makefile 介绍
make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。
首先,我们用一个演示例子来说明Makefile的书写规则。以便给大家一个感兴认识。这个演示例子来源于GNU的make使用手冊,在这个演示例子中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令怎样编译和链接这几个文件。我们的规则是:
- 1)假设这个工程沒有编译过,那么我们的全部C文件都要编译并被链接。
- 2)假设这个工程的某几个C文件被改动,那么我们仅仅编译被改动的C文件,并链接目标程序。
- 3)假设这个工程的头文件被改变了,那么我们须要编译引用了这几个头文件的C文件,并链接目标程序。
仅仅要我们的Makefile写得够好,全部的这一切,我们仅仅用一个make命令就能够完成,make命令会自己主动智能地依据当前的文件改动的情况来确定哪些文件须要重编译,从而自己编译所须要的文件和链接目标程序。
(从上面的编译规则,当编写makefile时,如果“.c” /".h"文件被修改的话,只需要编译与修改文件有依赖关系的文件,没有依赖的文件不需要重新编译,最后把所有编译的文件重新链接即可)
makefile 的规则
在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。
target ... : prerequisites ...
command
...
...
- target:目标文件,能够是Object File,也能够是运行文件。还能够是一个标签(Label),对于标签这样的特性,在后续的“伪目标”章节中会有叙述。
- prerequisites:生成 target 所须要的依赖文件或目标。
- command:make须要运行的命令,执行规则。
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中假设有一个以上的文件比target文件要新的话,command所定义的命令就会被运行。这就是Makefile的规则。也就是Makefile中最核心的内容。
makefile 基础编写语法:
在编写时,首先要注意三要素:目标、依赖项、命令。