Makefile:匹配多个模式的规则

时间:2013-10-14 07:29:26

标签: makefile pattern-matching

我的Makefile中有这个规则,它响应我传递的标志:

$(BUILD_DIR)/disable_%:
    mkdir -p $(BUILD_DIR)
    touch $(BUILD_DIR)/disable_$*
    rm -f $(BUILD_DIR)/enable_$*
    cd $(BUILD_DIR) && rm -f Makefile   

$(BUILD_DIR)/enable_%:
    mkdir -p $(BUILD_DIR)
    touch $(BUILD_DIR)/enable_$*
    rm -f $(BUILD_DIR)/disable_$*
    cd $(BUILD_DIR) && rm -f Makefile

这意味着当更改我调用makefile的标志时,我可以触发一些可能依赖于这些标志的重新编译。
上面介绍的代码有点多余:您看到我删除了一个文件,触摸另一个文件并在两种情况下都删除了Makefile。唯一改变的是我触摸/删除的​​文件的名称,它们是相关的。

例如,

make clean
make enable_debug=yes enable_video=no # will compile from zero
make enable_debug=no enable_video=no  # flag change detected -> recompile some submodules that depend on this flag

如果两个规则([en|dis]able)之间唯一发生变化,我想要的只是一个通用规则,类似的东西:

# match 2 parts in the rule
$(BUILD_DIR)/%ble_%: 
    mkdir -p $(BUILD_DIR)
    touch $(BUILD_DIR)/(???)ble_$*  # should be $@
    rm -f $(BUILD_DIR)/(???)able_$* # should be disable if $@ is enable and inverse
    cd $(BUILD_DIR) && rm -f Makefile

这可能吗?

PS:对不起,如果我没有正确地获得标题,我无法想出如何更好地解释它。

1 个答案:

答案 0 :(得分:1)

$(BUILD_DIR)/enable_% $(BUILD_DIR)/disable_%:
    mkdir -p $(BUILD_DIR)
    rm -f $(BUILD_DIR)/*able_$*
    touch $@
    cd $(BUILD_DIR) && rm -f Makefile

不是字面意思你想要的东西(make中禁止使用多个通配符),但是完全相同。