Bash 如何让Makefile只生成一个没有扩展名的文件名?

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 \

我正在尝试创建一个Makefile,该Makefile将标记文件导出为pdf文件,该pdf文件使用与原始标记文件相同的文件名。我使用了basename命令,但它生成的是inputfile.md.pdf而不是inputfile.pdf

请看下面我的代码我改编了一个我在网上找到的代码。谢谢

.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层,也许可以使用。

太棒了!这成功了!非常感谢:昨天我为此奋斗了好几个小时。