2016-06-06 28 views
2

的。如果我有如一個makefile:給定目標的名字,讓所有的先決條件

foo.o: foo.c a.h b.h c.h 
    cc -c foo.c -o foo.o 

現在,在生成文件的其他部分,我想獲得的foo.o所有prerequsites,像我在配方中用$^做。喜歡的東西:

$(info $(call GET_TARGET_PREREQS(foo.o))) # prints "foo.c a.h b.h c.h" 

基本上,我有我所有的目標文件相關文件(由-M生成),並從那裏我希望由一個給定的對象包括所有的頭文件的列表。

我希望得到一個或多或少純粹的解決方案,而不是解析*.d文件和輸出生成文件片段的sed腳本。

+0

這很酷,你在使用'-M',但爲什麼你需要標題列表文件包含由給定對象別處? –

+0

@JulienPalard我正在編寫一個在構建時運行的工具,並且我需要項目將使用的所有標題的列表(因此,我正在查找所有對象標題的集合)。一個簡單的'find。 -name「* .h」'將不起作用,因爲並不是所有的頭文件都被實際使用,這取決於構建配置。所以我需要通過'-M'運行所有的源代碼,看看它們包含了什麼,然後把它放在一個可讀的列表中。 – mtijanic

+0

您正在編寫一個在構建時運行並需要目標先決條件列表的工具,但您不希望在目標規則中調用它......並且您希望「或多或少都是純粹的製作解決方案」。這聽起來好像Make不適合你的想法。 – Beta

回答

0

如果你想打印所有prerequsites,你可以隨時使用$^

.PONY: all 

all: a b c 
     @echo $^ 
a: 
b: 
c: 
+0

但這隻在'all'的配方中有效。我需要的是獲得'a'裏所有''全部'的先決條件。甚至在所有其他食譜之外(例如,低於您提供的所有代碼)。關於爲什麼這是不可能的,請參閱上面有關MadScientist的評論。 謝謝,雖然。 – mtijanic