在 makefile 中使用 mktemp

在 makefile 中使用 mktemp

我想创建一个临时文件并使用 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)

相关内容