在一個大型的C項目中,我有一個頂級的Makefile和許多子Makefile在不同的子目錄中。我需要收集編譯的所有依賴關係。爲此,我添加了-MMD至CFLAGS並獲得一堆.d依賴文件。如何收集大型Makefile項目的所有依賴關係?
這些.d文件分散在子目錄中。此外,依賴關係有時被編寫爲絕對路徑,有時作爲與編譯目錄相關的路徑,有時包含符號鏈接。我編寫了一個腳本,用於查找所有.d文件,遍歷其目錄,並解析所有找到的路徑。這有效,但有數以萬計的依賴關係文件,這個依賴關係集合持續大約與編譯相同的時間! (這是等待太久:))
有沒有更快的方法來獲取單個文件中的所有依賴關係?這是ANSI C,GCC和Linux如果重要的話。提前致謝。
但是我有許多相同的文件名,比如'dir1/defs.h'和'dir2/defs.h',它們由相應的目錄中的源文件包含相對路徑(使用'#include「defs.h 「')。 'gcc -MM ... file.c >> $(top)/ all.d'只輸出'defs.h',我不知道使用了哪個'defs.h'。 – user3608247
第二種方案如何? –
第二種選擇與我現在所做的沒有多大區別:過濾器必須接收除stdin之外正在執行的** gcc **的路徑。現在我的腳本從** find **的輸出接收** .d **文件的路徑。 我想唯一可以做到的「更快」是GCC的一個選項,它可以爲依賴文件生成**解析絕對**路徑。沒有這樣的選項似乎存在... – user3608247