2016-07-15 34 views
0

當我使用一個Makefile不變量的目標,東西做工精細請始終重建依賴

preamble: 
     mkdir -p data 
     touch [email protected] 

data/a: preamble 
     touch [email protected] 

data/b: data/a 
     touch [email protected] 

data/c: data/a 
     touch [email protected] 

data/d: data/b data/c 
     touch [email protected] 

diamond: data/a data/b data/c data/d 
     touch [email protected] 

.PHONY: clean 
clean: 
     rm -rf ${data} diamond preamble 

然而,當我介紹參與始終運行目標變量的任務。

data="data" 
preamble: 
     mkdir -p ${data} 
     touch [email protected] 

${data}/a: preamble 
     touch [email protected] 

${data}/b: data/a 
     touch [email protected] 

${data}/c: data/a 
     touch [email protected] 

${data}/d: data/b data/c 
     touch [email protected] 

diamond: ${data}/a ${data}/b ${data}/c ${data}/d 
     touch [email protected] 

.PHONY: clean 
clean: 
     rm -rf ${data} diamond preamble 

這些始終執行

touch "data"/a 
touch "data"/b 
touch "data"/c 
touch "data"/d 
touch diamond 

什麼是包括在目標變量的正確方法是什麼?

回答

1

我建議不要使用引號。 Makefile不需要它們,它們是令人困惑的文件名。

用括號括起$(DATA)而不是$ {DATA}大括號更常見。

此外,作爲慣例,我建議在所有大寫中使用變量名稱。將其稱爲數據而不是數據。

+0

drrr。這樣可行。我想知道爲什麼報價不會在製作 – NinjaGaiden

+2

@ user3589054中工作 - 在'make'中,一切都是字符串。引號被視爲文字引號。要賦予像這樣的空格的VAR =字符串將工作正常。 – alvits