我想创建一个 makefile 规则,只有当变量改变时才会匹配。
我有包含 KERNEL_VERSION=A0XX
变量的 Rules.make
。
在编译结束时,我创建了 uImage
,二进制文件中包含 A0XX
字符串。
我想创建一个规则来读取 uImage
的版本(我正在使用
字符串 uImage | grep A0
)
如果 KERNEL_VERSION
变量不同,则只匹配规则,否则什么也不做。
这可能吗?
最佳答案
我觉得你想要的可以这样实现:
.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
仅当 uImage
文件中的变量 KERNEL_VERSION
的值不是 A0XX
。否则目标 aux-rule
将完全没有先决条件,因此 var-changed
的配方将不会作为先决条件执行对于 aux-rule
。
换句话说,如果变量发生变化,则规则将扩展为
aux-rule: var-changed
否则,如果变量没有改变,它将是:
aux-rule:
判断uImage
文件中的变量KERNEL_VERSION
是否有值A0XX
是根据命令strings uImage | grep "\bKERNEL_VERSION=A0XX\b"
.
关于linux - Makefile 匹配规则基于其他文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398440/