Поскольку a.md
уже на месте, make
действительно больше не имеет ничего общего. Вы можете либо просто использовать, например, a
в качестве указанной цели (что может зависеть от файлов pdf и html в качестве предварительных условий). Или пропустите нужный источник через переменную и определите желаемую цель из этого.
Один (последний) вариант будет таким:
EXPORTED= $(SOURCE:%.md=%.html) $(SOURCE:%.md=%.pdf)
%.html : %.md
pandoc -o $@ $<
%.pdf : %.md
pandoc -o $@ $<
all: $(EXPORTED)
Который вы можете позвонить с make SOURCE=a.md
.
Другой вариант (прежний):
%.html : %.md
pandoc -o $@ $<
%.pdf : %.md
pandoc -o $@ $<
.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%=%.html) $(MAKECMDGOALS:%=%.pdf)
Позволяет звонить make a
.
Но повторить. Вы не можете использовать (существующий) источник в качестве цели, потому что make (как и раньше) пришла к выводу, что она достигла этой цели.
За исключением (но лично мне это не очень нравится, так как это вводит в заблуждение IMO), если бы вы настаивали, вы могли бы сделать вариацию на предыдущем дубле ... но работать с *.md
целями ..., о которых вы все заявляете как .PHONY
. То есть не настоящие файлы и всегда нужно учитывать / переделывать:
%.html : %.md
echo pandoc -o $@ $<
%.pdf : %.md
echo pandoc -o $@ $<
.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%.md=%.html) $(MAKECMDGOALS:%.md=%.pdf)
Теперь вы действительно можете позвонить make a.md
. Я все еще предпочел бы один из двух выше.