Zsh 在运行 make TARGET 时“找不到命令”

问题描述 投票:0回答:1

我正在使用一个包含两个目标的 makefile,这两个目标都是变量。我可以在命令行上执行每个目标,如下所示:

make $(TARGET)

TARGET 是我正在输出的任何文件。但是,在创建目标之前,zsh 会抛出“未找到命令”警告,我认为这意味着 shell 正在首先寻找名为“TARGET”的命令。有没有办法阻止 zsh 在

make
找到命令之前尝试找到它?我已经尝试了
make $(OUTPUT)
make "$(OUTPUT)"
并且都导致“找不到命令”警告。

参考输出:

> make "$(OUTPUT)"
zsh: command not found: OUTPUT
make: 'the-contest.odt' is up to date.

Makefile 供参考:

OUTPUT=the-contest.odt
FINAL=the-contest.html

$(OUTPUT): the-contest.md
    pandoc -o the-contest.odt the-contest.md

$(FINAL): the-contest.md
    pandoc -o the-contest.html the-contest.md
makefile zsh
1个回答
1
投票

大多数 shell 中的表达式

$(some command)
表示“运行
some command
并替换输出”。因此,当您运行
make "$(OUTPUT)"
时,您是在要求您的 shell 运行名为
OUTPUT
的命令,这就是您收到命令未找到错误的原因。

对于你正在尝试做的事情,你可能想要重组你的 Makefile,例如:

OUTPUT=the-contest.odt
FINAL=the-contest.html

.PHONY: output
output: $(OUTPUT)

$(OUTPUT): the-contest.md
    pandoc -o the-contest.odt the-contest.md

$(FINAL): the-contest.md
    pandoc -o the-contest.html the-contest.md

现在你可以运行:

make output
© www.soinside.com 2019 - 2024. All rights reserved.