2014-01-11 52 views
4

我想要一組生成文件規則,這些規則會在構建項目之前創建符號鏈接到幾個代碼模塊之一。 make目標的名稱將決定符號鏈接指向的文件。例如:使用目標字符串創建符號鏈接的Makefile目標使用目標字符串創建符號鏈接

  • 用戶調用「讓R3000」
  • 製作看到那data.asm「還不存在,所以一個符號鏈接創建從「data_R3000.asm」到「data.asm」
  • 構建過程繼續進行,使用data.asm

我如何設置make規則做到這一點?

回答

4

也許是這樣的:

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被列爲相應的規則的前提條件。

+0

這樣的事情就是我要找的。謝謝! – Colin

0

我會做這樣的事情:

.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恰好也是一個元素的檢查。