makefile

111 阅读1分钟

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

    目标和先决条件的关系通过“依赖”得以表达,这种先决条件指出在构建某目标之前,需要保证某先决条件的构建。