如果make-file中的语句读取正确但未正确计算

时间:2014-09-17 18:10:04

标签: linux makefile conditional gnu-make

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

ifeq ($<,bar) @echo dfjhsdfhdfklhsdfhj endif

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

1 个答案:

答案 0 :(得分:2)

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

不会在相同的背景下(或同时)评估它们。

make等级ifeq在make解析时评估(因此$<没有值)。

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

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

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

如果第一个参数的计算结果为非空字符串,则

$(if)成功。

首先我们来自$(filter-out) bar $<,如果这留给我们一个非空字符串(意味着$<中的内容比bar更多然后$(if)计算它的第二个参数,在本例中为:(“just return true”shell命令)。如果我们得到一个空字符串,那么我们就知道$<等于bar$(if)评估它的第三个参数,在这种情况下是你的回声。