我的makefile中有以下语句用于条件编译
ifeq ($<,bar)
@echo dfjhsdfhdfklhsdfhj
endif
echo从未执行过,好像它没有正常工作所以我回显了if语句的值并获得了ifeq (bar,bar)
因此正确的语句被放入if语句但它永远不会评估为true,始终为false。为什么会这样? 在RHEL 6.5上使用GNU make
答案 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)
评估它的第三个参数,在这种情况下是你的回声。