0
我在我的Makefile這個規則,來響應標誌我傳:的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。唯一改變的是我觸摸/刪除的文件的名稱,它們是相關的。
例如,
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
)之間唯一改變的,我想是隻有1條通用的規則,這樣的事情:
# match 2 parts in the rule
$(BUILD_DIR)/%ble_%:
mkdir -p $(BUILD_DIR)
touch $(BUILD_DIR)/(???)ble_$* # should be [email protected]
rm -f $(BUILD_DIR)/(???)able_$* # should be disable if [email protected] is enable and inverse
cd $(BUILD_DIR) && rm -f Makefile
這可能嗎?
PS:對不起,如果我沒有正確得到標題,我無法想象如何更好地解釋它。
你確定'make enable_toto = yes'會執行'rm -f disable_toto' &&'touch enable_toto'嗎? – Gui13
我編輯了你的代碼以使其工作。使用rm,我可以刪除以前的文件! – Gui13
當你刪除其他的東西時,你可以'rm -f $(BUILD_DIR)/ Makefile'; 'rm'需要多個文件參數,'cd'是完全多餘的。 – tripleee