首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mktemp在Makefile中创建目录?

如何使用mktemp在Makefile中创建目录?
EN

Stack Overflow用户
提问于 2022-05-06 23:40:35
回答 1查看 204关注 0票数 0

这是一段Makefile代码,说明某人如何在Makefile中使用mktemp

代码语言:javascript
复制
TEST=$(shell mktemp -d)
mktemp:
    echo $(TEST)
    touch $(TEST)/test.txt
    ls $(TEST)
    cat $(TEST)/test.txt
    rm -rf $(TEST)

这是一个示例输出。

代码语言:javascript
复制
❯ make mktemp 
echo /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.tQI5EeyW
/var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.tQI5EeyW
touch /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.lVL3N8Rp/test.txt
ls /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.sBW9FzgD
cat /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.Ti53SWSw/test.txt
cat: /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.Ti53SWSw/test.txt: No such file or directory
make: *** [mktemp] Error 1

人们期望cat /var/folders/62/wkysd_4n0w57ljl9ycfsd9cc0000gn/T/tmp.Ti53SWSw/test.txt不会出错。

在这种情况下,如何使用mktemp?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-06 23:45:36

这一行:

代码语言:javascript
复制
TEST=$(shell mktemp -d)

TEST变量的值设置为字符串$(shell mktemp -d)。它不展开该字符串(不运行shell命令),它只将字符串保持为-原样。

现在,每次在makefile后面使用该值时,都会展开它--这意味着再次运行mktemp,并且得到一个不同的值:

代码语言:javascript
复制
mktemp:
        echo $(TEST)
        touch $(TEST)/test.txt
        ls $(TEST)
        cat $(TEST)/test.txt
        rm -rf $(TEST)

在赋值变量时,希望使用立即扩张,以便在分析makefile时只展开一次;请使用:

代码语言:javascript
复制
TEST := $(shell mktemp -d)

或者,您可以使用shell操作编写菜谱,而不使用任何类似于shell的make函数。

代码语言:javascript
复制
mktemp:
        TEST=$$(mktemp -d) && \
        echo $$TEST && \
        touch $$TEST/test.txt && \
        ls $$TEST && \
        cat $$TEST/test.txt && \
        rm -rf $$TEST

注意:默认情况下,菜谱的每一行逻辑行都在单独的shell中运行,因此为了让所有的行都在同一个shell中运行(因此它们可以访问相同的$TEST变量),您需要使用反斜杠将它们组合成一个逻辑行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72148362

复制
相关文章

相似问题

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