1
我有這樣的規則。makefile中的不同目錄的相同規則
$(OBJDIR)/%.s: %.c
$(CC) $(PPE-CFLAGS) $(DEFS) -S -o [email protected] $<
我有一個像
dirs := $(OBJDIR) $(COMOBJDIR)
因此,而不是寫重複的代碼爲每個目錄,我可以讓他們到一個列表?類似於需求迭代?
我有這樣的規則。makefile中的不同目錄的相同規則
$(OBJDIR)/%.s: %.c
$(CC) $(PPE-CFLAGS) $(DEFS) -S -o [email protected] $<
我有一個像
dirs := $(OBJDIR) $(COMOBJDIR)
因此,而不是寫重複的代碼爲每個目錄,我可以讓他們到一個列表?類似於需求迭代?
你已經擊中了Make的一個弱點:它無法一次處理多個通配符。有一種方法,但它很醜。
首先把你的規則:
$(OBJDIR)/%.s: %.c
$(CC) $(PPE-CFLAGS) $(DEFS) -S -o [email protected] $<
,並把它變成一個變量,轉義 '$' 符號和更換$(OBJDIR)
與$(1)
:
define myrule
$(1)/%.s: %.c
$$(CC) $$(PPE-CFLAGS) $$(DEFS) -S -o [email protected] $$<
endef
然後你就可以使用call
調用它,使用eval
:
$(eval $(call myrule, $(OBJDIR))
這對OBJDIR
不夠好,而是爲一個目錄列表做同樣的,使用foreach
:
$(foreach dir, $(OBJDIR) $(COMOBJDIR), $(eval $(call myrule, $(dir))))
或者只是使用您的變量:
dirs := $(OBJDIR) $(COMOBJDIR)
$(foreach dir, $(dirs), $(eval $(call myrule, $(dir))))
醜陋,但是有效。
我仍然喜歡將命令移動到(canned)變量中,然後只需定義多個每個目錄規則。更多的寫作,但沒有引用'$'字符的粘性混亂。 – Dummy00001
歡迎來到SO。你的問題不清楚。 請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)和 發佈問題makefile。如果它很大並且很複雜,那麼 會發佈一個makefile文件的[Minimal,Complete,Verifiable Example](http://stackoverflow.com/help/mcve),這個文件可以讓你更簡單。請格式化 代碼,方法是在編輯器中縮進4個空格或使用代碼格式化按鈕。 –