2014-05-20 25 views
2

我經常發現自己想引用裏面另外一個(目標2)目標(目標1)的依賴目標的相關性。品牌:獲取內另一個

考慮下面的Makefile。一個$(deps target-name)函數將會有多好!

Rule1 : file1 file2 file3 
    echo $^ # Careful, these are whitespaces, not a tab ! 

Rule2 : file4 file5 file6 
    echo $^ # Careful, these are whitespaces, not a tab ! 

clean-Rule-1-2 : 
    rm $(deps Rule1) $(deps Rule2) # Careful, these are whitespaces, not a tab ! 

我發現this鏈接提的是,人們可以爲自己建造自己的依賴列表,但它看起來相當繁瑣。

任何一個是否有一個更好的解決方案(假定沒有在Makefile中都是本機實現)和/或工作流提示提及這個問題?

回答

2

爲什麼要列出一個clean型規則的前提條件?這只是強制建立這些依賴關係,如果他們已經過時,只能再次刪除它們。

有沒有辦法做你想要什麼,因爲它是不可能被它保持一致。例如,您的規則可以這樣寫:

Rule1 : file1 file2 file3 
     echo $^ # Careful, these are whitespaces, not a tab ! 

clean-Rule-1-2 : $(deps Rule1) 
     rm $^ # Careful, these are whitespaces, not a tab ! 

Rule1 : file10 file11 file12 

糟糕!當擴展$(deps ...)使得不知道額外的三個先決條件,所以他們不會被列出。這甚至不考慮隱式規則,其中make在分析makefile時不知道完整的先決條件列表是什麼;它只在試圖構建目標時才計算它們。

你不給你想要做什麼一個真實的例子,但一般makefile文件的編寫方式是,你把先決條件爲變量,那麼你就可以在多個地方使用的變量。

+1

你是完全正確的,我提供的例子沒有任何意義,我編輯它。現在呢 ?你能明白爲什麼它可能有用嗎? 至於你對依賴列表順序的評論,我不會認爲它是一個警告,我會期望它的行爲是這樣的。 –