2015-04-04 51 views
1

我正在編譯一個開源項目,它沒有聲明sincos函數沒有聲明。當我查看math.h時,聲明就在那裏。我在math.h的頂部添加了一個警告,看它是否包含在內(如果有的話,會打印警告),並且在編譯代碼時實際上從未打印過。因此,我認爲它可能包含在/usr/include/math.h以外的地方。如何找出g ++包含哪個頭文件?

問題是它是一個巨大的代碼庫,並且就手工跟蹤包含目錄等而言是相當困難的。

有沒有一種方法可以告訴g ++打印包含它所解決的全部路徑的完整路徑?

+0

在'C++'中你應該包含''。頭文件'math.h'是'C'版本。 – Galik 2015-04-04 03:12:09

回答

3

您可以使用-E選項僅運行預處理器。這將在所有頭文件預處理後生成源代碼,這可能會很長。

相反,您可以生成一個生成文件來顯示依賴關係。如果使用-E -M,則應該看到文件依賴的所有包含文件的列表。

+1

本身,'-E'可能很難閱讀 - 增加'-C'保留註釋,使上下文更容易遵循。 – 2015-04-05 10:36:46

0

除了g++ -E -C,我發現-v參數對這種情況很有用。它會給你所有的默認搜索路徑/ sysrooty的東西,以及任何傳遞給子工具的默認內部參數。

此外,該命令會告訴你gcc是否嘗試使用不存在的缺省包含路徑,這在錯誤配置的gcc工具鏈中是一個常見問題。