Makefile всегда выполняется, хотя он не должен - PullRequest
0 голосов
/ 20 марта 2020

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 не работает, как бы я мог заставить его работать?

1 Ответ

1 голос
/ 20 марта 2020

Когда вы говорите «положить в нужную папку», какая это папка?

Это явно не локальный каталог, потому что если бы это был ваш make-файл, то он работал бы.

Первое неправильно, у вас неправильный синтаксис для vpath. См. Руководство; vpath принимает шаблон make-файла (это строка с нулем или одним % символом); он не поддерживает сглаживание оболочки, например *.h. Это должно быть написано:

vpath %.pdf ../../../Figures/Arrowshape/ChemicalNoise

Однако даже с этим исправлением ваш make-файл не будет работать, как вы надеетесь, потому что vpath не предназначен для поиска целей . Он предназначен для поиска исходных файлов (то есть файлов, которые не созданы make).

Если вы хотите глубоко это понять, вы можете прочитать http://make.mad-scientist.net/papers/how-not-to-use-vpath/

Чтобы заставить ваш make-файл работать так, как вы хотите, вам нужно добавить пути, например:

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 $<
...