14

マルチアーキテクチャビルドのプロジェクトでGCCプリコンパイル済みヘッダーを使用していますが、現在のソースのディレクトリとは異なるディレクトリに配置しようとすると、問題が発生します。

ファイルは二重引用符で囲まれており、山かっこに変更すると機能しますが、問題は、同じプリコンパイル済みヘッダー名を使用するプロジェクトが他にもたくさんあるため、すべてを山かっこに変更することは望ましくないことです。同じファイルのVisualStudioビルドに含めるヘッダーがあいまいになる可能性があるためです。

GCCは、現在のディレクトリで、検索パスの前にある二重引用符のインクルードを検索します-I-オプション(例)を使用して回避できる-Ipch_dir.i686 -I-ため、プリコンパイル済みヘッダーディレクトリが現在のディレクトリの前に検索されますが、このオプションは非推奨です。GCCは-iquote、を使用することを提案していますが、と同じ効果はありません-I-

したがって、問題は、すべてのプリコンパイル済みヘッダーに山かっこへのディレクティブを含めたり、非推奨のGCCスイッチを使用したりせずに、どうすれば機能させることができるかということです。

4

1 に答える 1

11

回避策を見つけました。

  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.gch、、a.hこれはで確認しました-H。元のヘッダーはインクルードされますが、プリコンパイル済みヘッダーには同一のインクルードガードがあるため、実際には処理されません(プリコンパイル済みヘッダー#errorのビルド後に元のヘッダーにを挿入することでも確認できます)。

于 2010-07-02T10:22:50.327 に答える