我想创建一个临时文件并使用 makefile 将一些文本通过管道传输到其中。
在 bash 中,我可以创建一个临时文件并将文本通过管道传输到其中,如下所示:
temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}
运行时的输出(如预期):
text goes into file
在 makefile 中使用相同的代码时,我得到以下输出:
生成文件:
test:
temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}
$make test
echo "text goes into file" > /bin/sh: -c: line 1: syntax error near
unexpected token `newline' /bin/sh: -c: line 1: `echo "text goes into
file" > ' make: *** [makefile:18: test] Error 2
知道我在这里做错了什么或者我是否缺少任何特殊的 makefile 语法规则?
答案1
问题是配方中的每一行都在单独的 shell 调用中运行,因此在一行中设置的 shell 变量在后续行中不可见(请参阅为什么 makefile 中当前目录没有改变?)。最重要的是,您需要将符号加倍,$
以便 shell 看到$
.
但是,您可以使用 Make 变量,而不是在此处使用 shell 变量:
TEMP_FILE := $(shell mktemp)
test:
echo "text goes into file" > $(TEMP_FILE)
cat $(TEMP_FILE)
rm $(TEMP_FILE)