我想创建一个仅在变量发生变化时才匹配的makefile规则。
我的Rules.make
包含KERNEL_VERSION=A0XX
变量。
在编译结束时,我创建了uImage
,并在二进制文件中包含A0XX
字符串。
我想创建一个从uImage
读取版本的规则(我正在使用
的 strings uImage | grep A0
)
如果KERNEL_VERSION
变量不同,则只匹配规则,否则不执行任何操作。
这可能吗?
答案 0 :(得分:1)
我认为你想要的就是这样:
.PHONY: aux-rule var-changed
all: aux-rule;
cmd := strings uImage | grep "\bKERNEL_VERSION=A0XX\b"
check-var = $(if $(shell $(cmd)),,var-changed)
.SECONDEXPANSION:
aux-rule: $$(check-var)
var-changed:
@echo Variable was changed
它包括在变量发生变化时动态生成先决条件。
基本上,通过扩展展开check-var
作为目标aux-rule
的先决条件,目标aux-rule
仅取决于先决条件var-changed
> KERNEL_VERSION
文件中的变量uImage
的值不是A0XX
。否则,目标aux-rule
将完全没有先决条件 ,因此var-changed
的配方不会作为aux-rule
的先决条件执行。< / p>
换句话说,如果变量发生变化,规则将扩展为
aux-rule: var-changed
否则,如果变量没有改变,则为:
aux-rule:
确定KERNEL_VERSION
文件中的变量uImage
是否具有值A0XX
是基于命令strings uImage | grep "\bKERNEL_VERSION=A0XX\b"
。