2010-07-02 58 views
12

我在我的項目中使用GCC預編譯頭文件與多體系結構構建,但是當我嘗試將它放在與當前源目錄不同的目錄中時,事情發生了故障。如何讓GCC在當前源文件的目錄之前搜索目錄中的標題?

該文件包含在雙引號中,並且如果將其更改爲尖括號,它會起作用,但問題是我有許多其他使用相同預編譯頭名稱的項目,因此將它們全部更改爲角度括號是不可取的,因爲它可能會在Visual Studio構建的相同文件中產生歧義。

GCC searches current directory for double-quote includes before its search path。我可以使用-I-選項(例如-Ipch_dir.i686 -I-)解決此問題,以便在當前目錄之前搜索預編譯頭文件目錄,但不推薦使用此選項。 GCC建議我使用-iquote,但它與-I-的效果不一樣。

所以問題是我如何使它的工作不需要改變所有的預編譯頭包括指令尖括號和使用不推薦的GCC開關?

+0

在一個位置使用一組預編譯頭文件在整個項目中使用會出現什麼問題?或者如果你的項目需要唯一的話,重命名你的預編譯頭文件? – 2010-07-02 00:32:13

+0

@Owen S.我想避免對全球項目結構/構建體系進行重大改變。 – 2010-07-02 00:42:41

回答

10

我找到了解決方法。

  1. 以不同的名稱構建預編譯頭。例如是標題爲a.h,原來的預編譯的頭是pchdir.i686/a.h.gch,打造爲

    gcc a.h -o pchdir.i686/a-precompiled.h.gch 
    
  2. 使用GCC的-include開關,以確保重命名的頭被包含之前任何東西(連原來a.h前)例如在源文件中

    gcc -Ipchdir.i686 -include a-precompiled.h <other arguments> <source> 
    
  3. 最終納入順序將是:a-precompiled.h.gcha.h,我已經與-H檢查。包含原始頭文件,但實際上並未處理,因爲預編譯頭文件具有相同的包含保護符(在構建預編譯頭文件後,通過在原始頭文件中插入#error進行驗證)。

+1

+1 @alex不錯,我遇到了類似的問題,我希望gcc在頭部位置的不同目錄中查找pch文件。我會盡力解決您的解決方法,並希望它能正常工作。 真的讓我對gcc感到惱火的是,爲什麼他們不讓pch功能更易於使用?我發現程序員/用戶的方式經常不得不擺弄那些我們不必擔心的工具設置。我的意思是它應該只是「工作」。 – greatwolf 2010-12-17 10:18:56

+1

+1 @alex。感謝分享這個解決方案,它也幫助我。只需要注意,您可以將其顯着簡化:不需要重命名預編譯的輸出並將其文件夾添加到includes。在配置相關文件夾中生成預編譯輸出後,使用-include及其唯一路徑,而不僅僅是名稱。在你的情況下:'gcc -include pchdir.i686/a.h ...'是你所需要的。 (在os x clang上工作) – zzz 2015-06-04 03:39:31

相關問題