我正在使用一个包含两个目标的 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
大多数 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