我正在尝试制作一个Makemark文件,该文件将Markdown文件导出为使用与原始Markdown文件相同的文件名的pdf文件。我使用了“ basename”命令,但它生成的是“ inputfile.md.pdf”而不是“ inputfile.pdf”。
请在下面查看我的代码(我改编了我在Internet上找到的代码。谢谢!):
.PHONY: pdf docx apa format
FILES := $(wildcard ./*.md)
pdf:
for file in $(FILES); do \
pandoc $$file \
--bibliography mypath \
--csl mypath \
--filter pandoc-citeproc \
--template eisvogel \
-o $(basename $$file).pdf; \
open $(basename $$file).pdf; \
done
谁能帮助我?我是Makefile(以及一般编程领域)的新手,因此非常感谢您提供任何详细的帮助。
我也在下面尝试了这些代码,但是它们生成了错误消息:
-o $(basename -s ".md" $$file).pdf; \
-o $(basename -s .md $$file).pdf; \
答案 0 :(得分:1)
$(basename …)
的书写方式就是basename
make function。通常这是正确的做法,但是您尝试在其变量中引用shell变量file
,但该变量在make层不可用。
在这种情况下,在外壳程序级别调用basename
Shell实用程序可能是最简单的。因此,您需要转义$
来进行shell替换,就像这样:
-o "$$(basename -s .md $$file)".pdf; \
open "$$(basename -s .md $$file)".pdf; \
或者,您可以尝试使用foreach
将循环移动到make层。