gpt4 book ai didi

echo 中的 Makefile 变量赋值错误

转载 作者:行者123 更新时间:2023-12-02 09:21:38 24 4
gpt4 key购买 nike

我有这样的文件目标

foo: 
i = 1
@echo $(i)

当我像这样运行 make 文件时:
$ make foo 

我 = 1
make: i: 命令未找到
Makefile:2: 目标 'foo' 的配方失败
制作:[foo] 错误 127


但是,如果我在作业中不给空格(即)
i=1

然后没有错误但没有输出,不打印 i 的值

最佳答案

第一次尝试运行命令 i带参数=2 . shell 中的正确赋值是 no spaces on either side of the equals sign.
您的第二个问题是两条物理线上的配方将运行两个不相关的 shell 实例。第一个将变量设置为一个值,然后退出并丢失该变量。第二个不相关的实例不知道第一个做了什么,当然也没有变量赋值的痕迹。解决方法是在逻辑上将两者合并为一行(只要它们之间有分号,您仍然可以将这些行拆分为多条物理行):

foo: 
i=1; \
echo "$${i}"
还要注意我们需要如何将美元符号加倍以防止 make从解释它们;和 proper use of quotes around strings in the shell. (在这种特殊情况下,我们知道该字符串不包含任何 shell 元字符;但许多初学者也遇到了这个问题。)
GNU Make 或者允许您指定 .ONESHELL 这会强制在单个 shell 实例中对配方中的所有命令进行评估;
.ONESHELL:
foo:
i=1
echo "$${i}"

关于echo 中的 Makefile 变量赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com