2012-12-05 64 views
2

大項目通常具有複雜的Makefile系統。很多變量定義和目標先決條件依賴關係分散在不同的Makefiles中。任何方便的方式來打印所有的先決條件和建立目標規則?如何使用make來打印目標的所有先決條件和構建規則

具體而言,有兩個問題:

問題1

說我有四個Makefile文件:

Makefile1:

p: a b 
    [some rule] 

Makefile2:

q: c d 
    [some rule] 

Makefile3:

r: e f 
    [some rule] 

的Makefile:

all: p q r 
    [some rule] 

我可以調用一些命令來獲得類似於下面的一些輸出?

all: a b c d e f 
    [rule 1] 
    [rule 2] 
    [rule 3] 
    ...... 

問題2

而且,如果我要檢查的實體只是一個普通的二進制,而不是在Makefile中指定一個目標是什麼?例如,如何獲取coreutils中的sha1sum的先決條件和構建規則? (很顯然,在coreutils的Makefile中沒有命名爲sha1sum的目標。)

我已經查看了make的幫助和手冊,但徒勞無功。也許我沒有弄清楚Google搜索的正確關鍵字。誰能幫我?謝謝!

+0

我不確定這會從其他Makefiles中獲取先決條件,但將其添加到目標會打印目標和先決條件:@echo $ @:$^ – cmotley

+0

@cmotley我試過了,但結果顯示此規則不會從其他Makefile中選取先決條件。不管怎樣,謝謝!關於第二個問題,你有什麼想法嗎?這實際上是我需要的。 – antiAgainst

+0

make -n可能是部分解決方案。它確實會丟失特定的目標信息,只是打印食譜。 –

回答

1

我對這個問題有點不清楚,但是您是否嘗試過-p選項。它打印解析生成文件生成的DAG,並打印規則,依賴關係和變量值。

任何構建甚至複雜的構建目標都遵循相同的原則。從你的例子來看,不清楚的是例如a和b的依賴關係是如何構建的。什麼是最終目標。

相關問題