2016-09-14 32 views
0

我想有以下規則:GNU作出不予建設目標

foo_% bar_%: 
     @echo "Complex building instructions for [email protected]" 

all: foo_xyz bar_xyz 

,然後運行「讓所有」,並得到:

Complex building instructions for foo_xyz 
Complex building instructions for bar_xyz 

然而,因爲「%」匹配相同的字符串兩次(xyz)它只是第一次「建立」,所以我得到的只是第一行。

當'$ @'第二次不同時,有沒有辦法讓GNU make執行'echo'兩次?畢竟,由於$ @不同,構建指令有所不同:/

回答

1

正如您所注意到的,多個模式目標的行爲與正常目標的行爲不同:Make會考慮負責製作所有模式的配方。

解決這種情況的方法是使用一個定義:

define complex-rule 
$1: 
    @echo "Complex building instructions for [email protected]" 
endef 

$(eval $(call complex-rule,foo_%)) 
$(eval $(call complex-rule,bar_%)) 

all: foo_xyz bar_xyz 

需要注意的是,因爲這將是eval版,我逃[email protected][email protected],因爲我希望它擴大配方運行時,不當我eval它。另一方面,我沒有逃脫$1,因爲我想第一個參數在call上展開。