Bash 如何让Makefile只生成一个没有扩展名的文件名?
我正在尝试创建一个Makefile,该Makefile将标记文件导出为pdf文件,该pdf文件使用与原始标记文件相同的文件名。我使用了basename命令,但它生成的是inputfile.md.pdf而不是inputfile.pdf 请看下面我的代码我改编了一个我在网上找到的代码。谢谢Bash 如何让Makefile只生成一个没有扩展名的文件名?,bash,makefile,Bash,Makefile,我正在尝试创建一个Makefile,该Makefile将标记文件导出为pdf文件,该pdf文件使用与原始标记文件相同的文件名。我使用了basename命令,但它生成的是inputfile.md.pdf而不是inputfile.pdf 请看下面我的代码我改编了一个我在网上找到的代码。谢谢 .PHONY: pdf docx apa format FILES := $(wildcard ./*.md) pdf: for file in $(FILES); do \
.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\ 你写$basename的方式……你得到了。这通常是正确的,但是您尝试在其参数中引用shell变量文件,该文件在make层不可用
在这种情况下,在shell级别调用basename shell实用程序可能是最容易的。因此,您需要跳出$以获得shell替换,如下所示:
-o "$$(basename -s .md $$file)".pdf; \
open "$$(basename -s .md $$file)".pdf; \
或者,您可以尝试将循环移动到make层,也许可以使用。太棒了!这成功了!非常感谢:昨天我为此奋斗了好几个小时。