我的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:对不起,如果我没有正确地获得标题,我无法想出如何更好地解释它。
答案 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中禁止使用多个通配符),但是完全相同。