22

scons を使用すると、インクルード パスを簡単に設定できます。

env.Append( CPPPATH=['foo'] )

これはフラグを渡します

-Ifoo

gccへ

ただし、多くの警告を有効にしてコンパイルしようとしています。特に

env.Append( CPPFLAGS=['-Werror', '-Wall', '-Wextra'] )

特定のブーストインクルードで恐ろしく死ぬ... gccはシステムインクルードを異なる方法で扱うため、インクルードパスではなくシステムインクルードパスにブーストインクルードを追加することでこれを修正できます。

-Ifoo の代わりに gcc に渡す必要があるのは

-isystem foo

CPPFLAGS 変数を使用してこれを行うことができると思いますが、scons に組み込まれたより良い解決策があるかどうか疑問に思っていました。

4

4 に答える 4

12

-isystem インクルード パスを SCons に渡す組み込みの方法はありません。これは主に、コンパイラ/プラットフォームに非常に固有であるためです。

CXXFLAGS に入れると機能しますが、これにより、CPPPATH のみを調べる SCons の依存関係スキャナーからヘッダーが隠されることに注意してください。

これらのヘッダーが変更されることがないと予想される場合、これはおそらく問題ありませんが、ビルド結果キャッシュや暗黙的な依存関係キャッシュを使用すると、奇妙な問題が発生する可能性があります。

于 2010-03-14T04:50:52.480 に答える
6

もし、するなら

  print env.Dump()

が表示_CPPINCFLAGSされ、CCCOM(または_CCCOMCOM)で使用されている変数が表示されます。_CPPINCFLAGSは通常、次のようになります。

  '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'

これから、_CPPSYSTEMINCFLAGSなどの「isystem」インクルードのセットを追加する方法をおそらく理解できます。独自のプレフィックス、パス変数名(CPPSYSTEMPATHなど)、およびサフィックスを定義し、上記のイディオムを使用してプレフィックスを連結するだけです。次に、_CPPSYSTEMINCFLAGSをCCCOMまたは_CCCOMCOMに追加するだけで、すぐに使用できます。

もちろん、これはシステム固有ですが、必要に応じて、コンパイラのコマンドラインに新しい変数を条件付きで含めることができます。

于 2010-03-30T17:33:45.000 に答える