溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

發(fā)布時(shí)間:2021-11-09 18:34:09 來(lái)源:億速云 閱讀:326 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

C / C++ 當(dāng)項(xiàng)目過(guò)于龐大的時(shí)候經(jīng)常會(huì)出現(xiàn)有些頭文件有多份拷貝。

如下圖所示:

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

有可能會(huì)出現(xiàn) 多份相同的頭文件里面代碼卻不一致的情況。

如果恰巧引用了這樣的頭文件,可能會(huì)導(dǎo)致編譯錯(cuò)誤,

比如:

A 目錄下的 xx.h 有一個(gè)變量 h;

B 目錄下的 xx.h 沒(méi)有變量 h;

我們編譯路徑中可能引用的是 B 目錄下面的 xx.h 就有可能 導(dǎo)致 訪問(wèn)不存在的變量 h 而導(dǎo)致編譯問(wèn)題。

那么怎么快速定位到我們引用的頭文件的路徑呢?

gcc 有相關(guān)編譯選項(xiàng) -MMD 或者 -MD

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

`-MD'
`-MD' is equivalent to `-M -MF FILE', except that `-E' is not
implied. The driver determines FILE based on whether an `-o'
option is given. If it is, the driver uses its argument but with
a suffix of `.d', otherwise it take the basename of the input file
and applies a `.d' suffix.

If `-MD' is used in conjunction with `-E', any `-o' switch is
understood to specify the dependency output file (but *note -MF:
dashMF.), but if used without `-E', each `-o' is understood to
specify a target object file.

Since `-E' is not implied, `-MD' can be used to generate a
dependency output file as a side-effect of the compilation process.

`-MMD'
Like `-MD' except mention only user header files, not system
header files.

一般加在 我們 Makefile 文件的 gcc 的 FLAGS 里面,根據(jù)不同的變量自行修改便可.

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

在 執(zhí)行 make 進(jìn)行編譯,會(huì)得到一個(gè) xx.cpp => xx.d 的文件

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

用編輯器打開(kāi)便可以看到完整的頭文件路徑:

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

從圖中可以清晰的看到所使用的頭文件的路徑

是用的 application/share/webapp_frame/include/webapp_headinfo.h

而不是 server/share/webapp_frame/include/webapp_headinfo.h 文件

如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題

這樣可以便于快速定位和修復(fù)一些編譯上面的問(wèn)題。

上述內(nèi)容就是如何通過(guò)使用 gcc編譯選項(xiàng)快速定位頭文件路徑解決編譯中的問(wèn)題,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

gcc
AI