makefile noob,即使文件是最新的,我的makefile也会始终执行每个配方。这是我的代码:
vpath *.pdf ../../../Figures/Arrowshape/ChemicalNoise
.PHONY : all clean
all : Fig_VP-CN-Revols_MeanfromDist_Dac0.0_F0.0-4.0_0to2.pdf\
Fig_VP-CN-Revols_MeanfromDist_Dac0.0_F0.0-4.0_2to4.pdf\
Fig_VP-CN-Revols_MeanfromDistImshow_Dac0.0_F0.0-4.0.pdf
Fig_%.pdf : %.py
$(warning Building $@ )
python $<
Fig_%_2to4.pdf : %.py
$(warning Building $@ )
python $<
Fig_%_0to2.pdf : %.py
$(warning Building $@ )
python $<
clean:
rm all
我检查了pdf文件是否放在正确的文件夹中,并且名称匹配。我的语法有什么问题?另外,我知道我的clean
不起作用,但是我如何使它起作用?
当您说“放入正确的文件夹”时,是哪个文件夹?
显然不是本地目录,因为如果您的makefile可以使用。
第一件事是错误的,您对vpath
的语法有误。参见手册; vpath
采用makefile模式(即具有零个或一个%
字符的字符串);它不支持*.h
这样的shell遍历。应该这样写:
vpath %.pdf ../../../Figures/Arrowshape/ChemicalNoise
但是,即使有此修复程序,您的makefile也无法如您所愿的那样工作,因为vpath
并非旨在查找targets。它旨在查找源文件(即不是由make创建的文件)。
如果您想深入了解这一点,可以阅读http://make.mad-scientist.net/papers/how-not-to-use-vpath/
要使makefile能够按需要工作,您必须添加路径,如下所示:
OUTDIR = ../../../Figures/Arrowshape/ChemicalNoise
all : $(OUTDIR)/Fig_VP-CN-Revols_MeanfromDist_Dac0.0_F0.0-4.0_0to2.pdf\
$(OUTDIR)/Fig_VP-CN-Revols_MeanfromDist_Dac0.0_F0.0-4.0_2to4.pdf\
$(OUTDIR)/Fig_VP-CN-Revols_MeanfromDistImshow_Dac0.0_F0.0-4.0.pdf
$(OUTDIR)/Fig_%.pdf : %.py
$(warning Building $@ )
python $<
$(OUTDIR)/Fig_%_2to4.pdf : %.py
$(warning Building $@ )
python $<
$(OUTDIR)/Fig_%_0to2.pdf : %.py
$(warning Building $@ )
python $<