gpt4 book ai didi

linux - 生成文件中的 if 语句正确读取但未正确评估

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:46 27 4
gpt4 key购买 nike

我的 makefile 中有以下语句用于条件编译

ifeq ($<,bar)
@echo dfjhsdfhdfklhsdfhj
endif

echo 从未执行过,看起来好像没有正常工作,所以我回显了 if 语句的值并得到了 ifeq (bar,bar)因此,正确的语句被放入 if 语句中,但它永远不会计算为 true 并且总是为 false。为什么会这样? 在 RHEL 6.5 上使用 GNU make

最佳答案

我假设您是在目标规则中使用它?你用类似 echo ifeq ($<,bar) 的东西来回应这些值在规则的一行上?

那些不是在相同的上下文中(或同时)评估的。

制造水平ifeq在 make 解析时计算(因此 $< 没有值)。

echo shell 行的扩展(用于进行变量替换)在目标处理时间 a 进行评估(因此 $< 具有值)。

尝试使用 @$(if $(filter-out bar,$<),:,echo dfjhsdfhdfklhsdfhj)相反。

$(filter-out)从其第二个参数中删除与第一个参数匹配的所有单词(此处也接受模式)。

$(if)如果其第一个参数的计算结果为非空字符串,则成功。

所以首先我们$(filter-out) bar来自 $<如果这给我们留下了一个非空字符串(意味着 $< 不仅仅是 bar )那么 $(if)计算它的第二个参数,在本例中为 : (“只返回真”shell 命令)。如果我们得到一个空字符串,那么我们就知道 $<等于 bar$(if)评估它的第三个参数,在本例中是您的回声。

关于linux - 生成文件中的 if 语句正确读取但未正确评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897492/

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