Makefile中的所有目标

时间:2012-04-29 10:17:54

标签: makefile

我正在学习使用漂亮的Linux工具:make。还有一些我想要理解的东西:

让我们来看看这个简单的例子:

JADE = $(shell find pages/*.jade)
HTML = $(JADE:.jade=.html)

all: $(HTML)

%.html: %.jade
    jade < $< --path $< > $@

clean:
    rm -f $(HTML)

.PHONY: clean

当我运行watch make时,我真的不太了解输出字符串:make:与'all'没什么关系。

问题:

  1. 所有行动的作用是什么?
  2. 所有动作对手表工具有什么用处吗?

1 个答案:

答案 0 :(得分:4)

all目标实际上只是您提供的makefile中的默认目标。文件中的第一个目标是默认目标,它是在运行make时构建的,而未指定目标。

当make告诉你在构建all目标时没有工作要做的时候,这意味着所有的依赖项都是先前构建的并且是最新的(即它们之间没有任何依赖项已被更改)最后建造他们)。在您的情况下,这意味着HTML输出文件比相应的Jade输入文件更新。因此,没有什么可以做的。

watch实用程序只是重复运行一个命令,让您观察其输出随时间的变化情况。 Watch会每隔很多秒运行make并显示输出。当它第一次运行时,它将构建所有内容,make watch之后的所有后续调用都将说明所有内容都是最新的。所以在make内运行watch似乎没有用,除非你在任意时间点修改文件并想要通过重建它们做出反应,但这似乎是是一个有点人为的例子。