Естественный способ сказать это в Make - это перечислить все главы как цели, как правило, как зависимости для make all
.
Так что в основном
src := $(wildcard *.md)
epubs := $(patsubst %.md,%.epub,$(src))
.PHONY: all
all: $(epubs)
%.epub: %.md
pandoc -s -o $@ $<
Вы можете сказать make ch4.epub
если у вас есть глава с источником ch4.md
.Вы не можете действительно передать аргумент, который не является именем файла или целевым именем, и они не могут содержать пробелы.
Я полагаю, вы могли бы добавить фальшивку типа
.PHONY: 2
2: ch2.epub
чтобы иметь возможность сказать make 2
и иметь это значение make ch2.epub
.Если имена файлов систематически называются так, вы можете обобщить до
short := $(patsubst ch%.md,%,$(src))
.PHONY: $(short)
$(short): %: ch%.epub
Не используйте @
впереди, это только усложняет ситуацию.Вы можете использовать make -s
, если вы не хотите видеть вывод и не разрушать ваш Makefile
.