Makefile始终运行目标
我可能会错过这个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,并仅在未找到该文件时调用该目标。如果我删除它
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
的文件。