Это правило:
%.html : %.Rmd
....
указывает make для создания файла foo.html
из файла foo.Rmd
или файла source/foo.html
из файла source/foo.Rmd
или файла docs/foo.html
из файла docs/foo.Rmd
.
Он не указывает make для создания файла docs/foo.html
из файла source/foo.Rmd
, поскольку основа, соответствующая шаблону %
, не совпадает.
Если вы хотите написать шаблон для docs/foo.html
, который будет построен из source/foo.Rmd
, вы должны написать его так:
$(OUTDIR)/%.html : $(SRCDIR)/%.Rmd
....
, чтобы часть, соответствующая шаблону%
идентичен.
ETA Некоторые другие примечания: вы должны использовать :=
с функцией wildcard
, так как она намного эффективнее.Также вы не должны использовать subst
здесь, потому что он заменяет все вхождения строки, которые могут привести к поломке, если любой из ваших .Rmd
файлов содержит, например, строку source
(например, source/my_source_file.Rmd
Это гораздо лучше написано с помощью patsubst
, например:
RMD := $(wildcard $(SRCDIR)/*.Rmd)
HTML := $(patsubst $(SRCDIR)/%.Rmd,$(OBJDIR)/%.html,$(RMD))
Наконец, вы не показываете, что делает цель clean
, но это необычно, когда цель clean
зависит отall
. Обычно это отдельная цель, которая вызывается только тогда, когда вы этого хотите, например make clean
.