Makefile与linux源码的关系
在Linux 0.01 源码中,可以看到一级目录下有一个单独的文件,就是Makefile;同样的,在fs、kernel、lib、mm目录下都有一个Makefile文件。
Makefile是什么
makefile定义了一系列编译规则,例如先后顺序、是否需要重新编译、还有一些更复杂的操作。makefile的内容类似于一个shell脚本,通过linux指令“make”得到执行。学习Makefile需要理解三个重点,“目标” (target)、“依赖” (dependency)、“规则” (rule)。
一、目标
对于一个简单的Makefile文件(文件名为Makefile),例如:
all:
echo "hello world"
test:
@echo "here is test"
通过执行make或make all,可以看到输出为
echo "hello world"
hello world
执行make test,输出为
here is test
综上,单独执行make默认选择最上面的“目标”(在本例中指all:);如果在make指令后指定目标,则执行指定的目标;若在Makefile内的指令前加上@,则不输出执行的指令。
二、依赖
对上述makefile的第一行进行一些修改,在all: 后添加 test
all: test
执行make后,输出的第一行变为here is test。这说明在构建all目标之前test目标也被构建了,all “依赖” test,这也是称之为“依赖”的原因。
三、规则
“规则”用来指明make什么时候以及如何重新创建目标,由目标、先决条件、命令组成。具体格式为
target: dependency
command
目标和先决条件的关系通过“依赖”得以表达,这种先决条件指出在构建某目标之前,需要保证某先决条件的构建。