2013-12-09 67 views
4

我希望g ++/gcc告訴我所有非系統的路徑#include -in C++ build。事實證明,這是一個艱難的搜索,谷歌音樂解釋它十種不同的方式。如何獲取g ++列出所有#included文件的路徑

我想要這些文件名和路徑,以便我可以將它們添加到Exuberant CTAGS的搜索路徑。我們有一個巨大的項目,如果我在整個事情上使用ctags,大約需要半個小時才能生成標記文件,並且幾乎與編輯器一樣查找。

我們使用CMakeLisats來編譯。如果有一條指令我可以粘貼到CMakeLists.txt中,那就更加奇妙了。

我真的不需要默認路徑和文件名,Johnathan Wakely給了here一個很好的工具。我認爲這幾乎涵蓋了這是一個交叉編譯工作。我也不需要跨系統文件。

回答

8

您需要使用-M選項調用g ++。

manual

代替輸出的預處理的結果,輸出的規則 適於化妝描述的主要來源文件的相關性。 預處理器輸出一個make規則,該規則包含該源文件的目標文件名稱 ,冒號以及所有包含的 文件的名稱,其中包括來自-include或-imacros命令行選項的所有文件的名稱。

這是值得一讀的手冊,以考慮其他-M子選項(尤其是-MM-MF可能是使用的)。

+0

-MM -MF搞定了。給任何可能使用此答案的人,請指定-MM -MF或-H阻止實際編譯,使用它,然後將其註釋掉。 –

9

嘗試gccg++-H選項(到preprocessor的一部分)。從DOC:

-H

打印每個頭文件的使用,以及其他正常活動的名稱。每個名稱都縮進來顯示'#include'堆棧的深度。預編譯的頭文件也被打印出來,即使它們被發現是無效的;一個無效的預編譯頭文件用'... x'打印,另一個用'...!'打印。

它會告訴你所有包含的頭文件。您可能會過濾掉(不包括grep -vawk)那些您不需要的。

Oliver Matthews' answer中建議的-M選項相比,它不會告訴您更多(但提供所有包含的文件)。

+0

比-M更漂亮的輸出,但-MM擺脫了許多煩人的系統文件。在我的情況下,很多討厭的文件。我仍然需要進入輸出並刪除boost和Qt頭文件(我使用的是X2編輯器,grep,sed或awk也可以)。 –

相關問題