首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在makefile中使用mktemp

在makefile中使用mktemp
EN

Unix & Linux用户
提问于 2021-02-17 10:29:07
回答 1查看 1.9K关注 0票数 0

我希望创建一个临时文件,并使用makefile将一些文本导入其中。

在bash中,我可以创建一个临时文件并将文本导入其中,如下所示:

代码语言:javascript
复制
temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}

运行时输出(如预期的那样):

代码语言:javascript
复制
    text goes into file

在makefile中使用相同的代码时,我得到以下输出:

makefile:

代码语言:javascript
复制
test:
    temp_file=$(mktemp)
    echo "text goes into file" > ${temp_file}
    cat ${temp_file}
    rm ${temp_file}

$make test

代码语言:javascript
复制
    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语法规则?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-12-09 05:25:42

问题是,菜谱中的每一行都是在单独的shell调用中运行的,因此在一行中设置的shell变量在后续行中不可见(请参阅为什么当前目录在makefile中不改变?)。最重要的是,您需要加倍$标志,以便shell能够看到$

但是,您可以使用Make变量而不是在这里使用shell变量:

代码语言:javascript
复制
TEMP_FILE := $(shell mktemp)
test:
    echo "text goes into file" > $(TEMP_FILE)
    cat $(TEMP_FILE)
    rm $(TEMP_FILE)
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/634954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档