我想要一組生成文件規則,這些規則會在構建項目之前創建符號鏈接到幾個代碼模塊之一。 make目標的名稱將決定符號鏈接指向的文件。例如:使用目標字符串創建符號鏈接的Makefile目標使用目標字符串創建符號鏈接
- 用戶調用「讓R3000」
- 製作看到那data.asm「還不存在,所以一個符號鏈接創建從「data_R3000.asm」到「data.asm」
- 構建過程繼續進行,使用data.asm
我如何設置make規則做到這一點?
我想要一組生成文件規則,這些規則會在構建項目之前創建符號鏈接到幾個代碼模塊之一。 make目標的名稱將決定符號鏈接指向的文件。例如:使用目標字符串創建符號鏈接的Makefile目標使用目標字符串創建符號鏈接
我如何設置make規則做到這一點?
也許是這樣的:
MODULES := $(patsubst data_%.asm,%,$(wildcard data_*.asm))
all:
...
data.asm:
[ -n "$(filter $(MAKECMDGOALS),$(MODULES))" ] || { echo unknown module: $(MAKECMDGOALS) ; exit 1; }
ln -s $(filter $(MAKECMDGOALS),$(MODULES)) [email protected]
然後確保data.asm
被列爲相應的規則的前提條件。
我會做這樣的事情:
.PHONY mklink
mklink:
test -e data_$(MAKECMDGOALS).asm || exit 1
ln -s data_$(MAKECMDGOALS).asm data.asm
,然後讓所有(以及其他目標)依賴於mklink。您不應該在規則中將data.asm作爲目標的原因是,如果您運行make R3000
,則會創建data.asm,然後如果運行make L2000
,data.asm文件將指向錯誤的目錄,並不會被覆蓋(我會假設這不是你想要的)。測試線檢查鏈接目標是否存在,如果不存在,則退出1,導致目標失敗。您還應該添加一個MAKECMDGOALS恰好也是一個元素的檢查。
這樣的事情就是我要找的。謝謝! – Colin