Makefile匹配规则基于其他文件中的变量

时间:2018-01-23 09:39:08

标签: linux makefile gnu-make

我想创建一个仅在变量发生变化时才匹配的makefile规则。

我的Rules.make包含KERNEL_VERSION=A0XX变量。

在编译结束时,我创建了uImage,并在二进制文件中包含A0XX字符串。

我想创建一个从uImage读取版本的规则(我正在使用 的 strings uImage | grep A0 ) 如果KERNEL_VERSION变量不同,则只匹配规则,否则不执行任何操作。

这可能吗?

1 个答案:

答案 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"

相关问题