Makefile 文件功能描述
Makefile 文件相当于程序编译过程中的批处理文件。是工具程序 make 运行时的输入数据文件。只要在含有 Makefile 的当前目录中键入 make 命令,它就会依据 Makefile 文件中的设置对源程序或目标代码文件进行编译、连接或进行安装等操作。
make工具程序能自动地确定一个大程序系统中哪些程序文件需要被重新编译,并发出命令对这些程序文件进行编译。在使用 make 之前,需要编写 Makefile 信息文件,该文件描述了整个程序包中各程序之间的关系,并针对每个需要更新的文件给出具体的控制命令。通常,执行程序是根据其目标文件进行更新的,而这些目标文件则是由编译程序创建的。一旦编写好一个合适的 Makefile 文件,那么在你每次修改过程序系统中的某些源代码文件后,执行 make 命令就能进行所有必要的重新编译工作。make 程序根据Makefile 数据文件和代码文件的最后修改时间(last-modification time)来确定哪些文件需要进行更新,对于每一个需要更新的文件它会根据 Makefile 中的信息发出的相应的命令。在 Makefile 文件中,开头为“#” 的行是注释行。文件开头部分的“=” 赋值语句定义了一些参数或命令的缩写。
这个 Makefile 文件的主要作用是指示 make 程序最终使用独立编译连接成的 tool/ 目录中的 build 执行程序将所有内核编译代码连接和全并成一个可运行的内核映像文件 image。 具体是对 boot/ 中的bootsect.s、setup.s 使用 8086汇编器进行编译,分别生成各自的执行模块。再对源代码中的其他所有程序使用GNU 的编译器 gcc/gas 进行编译,并链接模块 system。最后再用 build 工具将这三块组合成一个内核映像文件 image。build 是由 tools/build.c 源程序编译而成的一个独立的执行程序,它本身并没有被编译链接到内核代码中。
图:内核编译链接/组合结构
在Linux内核源代码中,除 tools/、init/和 boot/目录外,其余每个子目录均包含一个相应的 Makefile 文件,这些文件结构完全一样。