如何判斷g ++能夠找到包含文件?基本上如果我如何判斷頭文件包含在哪裏?
#include <foo.h>
g ++將掃描搜索路徑,使用任何包含選項來添加或更改路徑。但是,在幾天結束時,是否有一種方法可以告訴g ++選擇編譯的foo.h的絕對路徑?如果在多種搜索路徑中有多個foo.h,尤其相關。
缺乏一種方法來實現...有沒有辦法讓g ++告訴我它的最終搜索路徑是什麼,包括默認和所有包含選項?
如何判斷g ++能夠找到包含文件?基本上如果我如何判斷頭文件包含在哪裏?
#include <foo.h>
g ++將掃描搜索路徑,使用任何包含選項來添加或更改路徑。但是,在幾天結束時,是否有一種方法可以告訴g ++選擇編譯的foo.h的絕對路徑?如果在多種搜索路徑中有多個foo.h,尤其相關。
缺乏一種方法來實現...有沒有辦法讓g ++告訴我它的最終搜索路徑是什麼,包括默認和所有包含選項?
這會給使依賴其名單包括文件的絕對路徑:
gcc -M showtime.c
如果您不希望系統包括(即#include <something.h>
),然後使用:
gcc -MM showtime.c
應該注意的是,如果您與「-o myObj.o」一起使用,輸出(而不是編譯的二進制)會進入「myObj.o」。 -M有一個隱含的-E,所以編譯不成立。我發現-MD是一個非常有用的選項,它執行編譯並將輸出放在myObj.d中。爲你的編譯行做一個合適的參數,而不需要像* .o這樣的奇怪效果,現在包含輸出而不是二進制。謝謝你的幫助。 – harschware 2011-04-29 17:33:09
當然使用
g++ -E -dI ... (whatever the original command arguments were)
如果使用-MM
或相關的選項之一(-M
,等等),你得到的只是所包含無需其他所有的預處理器輸出(你好像頭的列表以獲得建議的g++ -E -dI
解決方案)。
'g ++ -MM t.cc'根本不顯示包含,只是'to:t。 cc'。它需要別的東西嗎? – wallyk 2011-04-29 16:59:56
不錯 - 爲了完整性,您可以使用'/ showIncludes'選項與MSVC相似。 MSVC甚至會縮進來顯示標題的嵌套(我沒有在GCC上看到'-M')。 – 2011-04-29 17:02:39
@wallyk:試一下'-M' – 2011-04-29 17:03:25
g++ -H ...
還將打印包含文件的完整路徑,其格式顯示哪個頭文件包含哪個文件夾。
在我的經驗中,這似乎比-M更有幫助。我喜歡什麼包括什麼的分層顯示。 – 2013-12-18 13:17:23
很好,這對調試目的很有幫助。 – 2015-03-15 03:01:49
這是最好的答案。您可以將其添加到您的構建過程中,而無需更改任何其他內容 – Timmmm 2015-06-03 13:29:56
相關:有什麼辦法可以告訴哪個父包含文件包含子包含文件?即(提示:gcc -E並不在那裏......可能會被處理以產生它)。 – 2013-01-08 22:53:46