GCC と clang を使用すると、SCons の「TryCompile」機能を使用して、現在構成されているコンパイラが特定のコンパイル フラグをサポートしているかどうかを判断する簡単な構成チェックを構築できました。基本的に、env を複製し、問題のフラグを CFLAGS、CCFLAGS、または CXXFLAGS に適宜追加し、TryCompile を実行します。TryCompile が成功すると、フラグがサポートされ、実際の env に追加できます。
- 不明なフラグはエラーであり、コンパイラはゼロ以外のステータスで終了するため、これは gcc で完全に機能します。
- デフォルトでは、clang は不明なエラーを警告として扱いますが、-Werror を渡すと、不明なフラグがエラーに変わります。したがって、TryCompile のラッパーは、clang を使用していることを認識している場合は、テスト対象のフラグと共に常に -Werror を渡します。
ただし、これはすべて Microsoft ツールチェーンに当てはまります。私が発見した限りでは、不明なフラグをエラーとして処理するようにコンパイラを説得する方法がないためです。フラグを渡して警告エラーを発生させたとしても、それらは常に警告です。フラグが受け入れられるかどうかにかかわらず、コンパイルはきれいに終了するため、TryCompile は常に成功します。MSVC をゼロ以外のステータスで終了させるために行ったさまざまな試みの詳細については、この質問を参照してください。
これをどのように機能させることができるかについてのアイデアはありますか? 私が見落としている、この仕事をしてくれる別の SCons 施設はありますか? 終了ステータスを調べるのではなく、MS プラットフォームで TryCompile に割り込んで、コンパイラの出力を解析する必要があります。私は、clang と gcc を使用して時刻フラグの検出を構成するために TryCompile を使用することに非常に満足していますが、MSVC を連携させることができない場合は、このアプローチ全体を放棄する必要があります。これまでのところうまくいっています。