Makefile始终执行,即使它不应该';T
makefile noob在这里,我的makefile总是执行每个配方,即使这些文件是最新的。这是我的密码:Makefile始终执行,即使它不应该';T,makefile,gnu-make,Makefile,Gnu Make,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
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
vpath*.pdf../../../Figures/Arrowshape/ChemicalNoise
.骗子:都是干净的
全部:图VP-CN-Revols\U MeanfromDist\U Dac0.0\U F0.0-4.0\U 0to2.pdf\
图VP-CN-Revols平均值从0.0到0.0-4.0到4.pdf\
图VP-CN-Revols\U MeanfromDistImshow\U Dac0.0\U F0.0-4.0.pdf
图%.pdf:%.py
$(警告建筑$@)
蟒蛇$<
图2%\u 2to4.pdf:%.py
$(警告建筑$@)
蟒蛇$<
图%\u 0to2.pdf:%.py
$(警告建筑$@)
蟒蛇$<
清洁:
rm全部
我检查了pdf文件是否放在正确的文件夹中,名称是否匹配。我的语法有什么问题?
另外,我知道我的清理不起作用,但是我如何使它起作用?当你说“放入正确的文件夹”时,那是哪个文件夹
它显然不是本地目录,因为如果它是您的makefile,它就可以工作
第一个错误是vpath
的语法错误。参见手册vpath
采用makefile模式(即包含零个或一个%
字符的字符串);它不支持像*.h
那样的shell全局绑定。这应该写在:
vpath %.pdf ../../../Figures/Arrowshape/ChemicalNoise
然而,即使有了这个修复,您的makefile也不会像您希望的那样工作,因为vpath
并不打算查找目标。它旨在查找源文件(即不是由make创建的文件)
如果你想深入了解这一点,你可以阅读
要使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 $<
OUTDIR=../../../Figures/Arrowshape/ChemicalNoise
全部:$(OUTDIR)/Fig\U VP-CN-Revols\U MeanfromDist\U Dac0.0\U F0.0-4.0\U 0to2.pdf\
$(OUTDIR)/Fig_VP-CN-Revols_mean from dist_Dac0.0_F0.0-4.0_2to4.pdf\
$(OUTDIR)/Fig_VP-CN-Revols_mean from distimshow_Dac0.0_F0.0-4.0.pdf
$(OUTDIR)/Fig_u%.pdf:%.py
$(警告建筑$@)
蟒蛇$<
$(OUTDIR)/Fig_u%\u 2to4.pdf:%.py
$(警告建筑$@)
蟒蛇$<
$(OUTDIR)/Fig_u%\u0to2.pdf:%.py
$(警告建筑$@)
蟒蛇$<
对于问题的干净部分,应该是clean:
(换行符/选项卡)rm$(全部)
(all
在本例中是一个变量。您尝试删除一个文本名为all
)的文件,但该文件不幸无法正常工作。它似乎使变量all
为空。你确定all
被视为变量吗?对不起,我的错--(出于某种原因,我以为你有all:=
而不是all:
--也就是说,这就是解决这个问题的方法--创建一个变量all DEPS:=…
,然后执行rm-f$(所有步骤)
在清洁配方中使用all:$(所有步骤)
。这是你的主要规则。谢谢。正确的文件夹是指我提供的位置vpath对应于python脚本生成pdf文件的位置。你知道我的clean中rm all问题的解决方案吗?我不明白这个问题。你还没有说你希望它做什么。如果你希望它删除创建的文件您必须在rm
命令中列出这些文件。您还应该使用rm-f
,以便在它们不存在时不会失败。是的,clean应该从all
中删除目标文件rm-f
是一个很好的提示,谢谢。rm-all
删除名为all
的文件。如果要删除目标文件,必须列出它们;记住make基本上会调用shell命令(在扩展make变量/函数之后),因此在shell中输入删除文件的任何命令都是在makefile配方中输入的命令。