【发布时间】:2018-06-30 10:20:17
【问题描述】:
我创建了一个Makefile 来生成pdf 和html 用于在调用make 时提到的make a.md 之类的文件应该生成a.pdf 和a.html,并且不应转换其他@987654329 @目录中存在的文件。
但我遇到了错误Nothing to be done for a.md
您能建议更改吗?
【问题讨论】:
我创建了一个Makefile 来生成pdf 和html 用于在调用make 时提到的make a.md 之类的文件应该生成a.pdf 和a.html,并且不应转换其他@987654329 @目录中存在的文件。
但我遇到了错误Nothing to be done for a.md
您能建议更改吗?
【问题讨论】:
因为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。 IE。不是真正的文件,总是要考虑/重新制作:
%.html : %.md
echo pandoc -o $@ $<
%.pdf : %.md
echo pandoc -o $@ $<
.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%.md=%.html) $(MAKECMDGOALS:%.md=%.pdf)
现在您确实可以致电make a.md。我还是更喜欢以上两种中的一种。
【讨论】:
make a.md 之类的值并将其存储在 SOURCE 变量中吗?