Makefile始终运行目标

Makefile始终运行目标,makefile,Makefile,我可能会错过这个Makefile中一些非常明显的东西: convert: devel/bar touch convert init: devel/foo echo 'init' devel/foo: mkdir -p devel touch devel/foo devel/bar: init touch devel/bar 当我运行它时,总是调用devel/bar目标。我希望它调用convert,检查文件devel/bar,并仅在未找到该文件时调用该目标。如果我删除它

我可能会错过这个Makefile中一些非常明显的东西:

convert: devel/bar
  touch convert

init: devel/foo
  echo 'init'

devel/foo:
  mkdir -p devel
  touch devel/foo

devel/bar: init
  touch devel/bar

当我运行它时,总是调用
devel/bar
目标。我希望它调用
convert
,检查文件
devel/bar
,并仅在未找到该文件时调用该目标。如果我删除它对
init
的依赖,一切都会像我所期望的那样工作。我做错了什么?

您没有创建名为
init
的文件,因此
init
总是过时。因此,依赖于它的所有内容总是过时。

可能没有名为
init
的文件?因此它尝试更新
devel/bar
(因为它依赖于
init


考虑使用
.PHONY

使用
.PHONY:init
会使
init
过期,即使他创建了一个名为
init
的文件。听起来和他想要的正好相反。哦,对不起
.INTERMEDIATE
可能会起作用。但是,这就是它运行目标的原因——它首先尝试创建一个名为
init
的文件。