Makefile总是执行,即使它不应该执行

问题描述 投票:0回答:1

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 gnu-make
1个回答
1
投票

当您说“放入正确的文件夹”时,是哪个文件夹?

显然不是本地目录,因为如果您的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 $<
© www.soinside.com 2019 - 2024. All rights reserved.