3

さまざまな理由から、MS C++ コンパイラが特定のフラグを尊重するかどうかの検出をスクリプト化できるようにしたいと考えています。Windows 7.1 SDK のコンパイラを使用しています。

C:\> cl /version
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

したがって、フラグがこのコンパイラでサポートされているかどうかを知りたいとしましょう/GLEFGB(存在しないため、サポートされていません)。

C:\>cl /c ./foo.cc /GLEFBG
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9002 : ignoring unknown option '/GEFBG'
foo.cc

OK、良いスタートですが、これは警告であり、終了ステータスを無効に設定しません:

C:\>echo %errorLevel%
0

でエラーとして警告をオンにすれば完了/WXですよね?

C:\>cl /c ./foo.cc /WX /GLEFBG

Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9002 : ignoring unknown option '/GEFBG'
foo.cc

違う。これはがっかりしています。D9002が/WX何らかの理由でキャプチャされていない可能性がありますか?/weそのコードで使用することで、明示的にエラーにすることができるでしょうか? これが機能するかどうかを推測してみてください。

C:\>cl /c ./foo.cc /WX /weD9002 /GLEFBG
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line error D8021 : invalid numeric argument '/weD9002'

いいえ、エラーが発生しました。これは、明らかにこのコンパイラ警告のタグが の正当な引数ではないため/weです。も試し/we9002ましたが、どちらも機能しません。

だから、今私はアイデアがありません。cl無効なフラグが渡された場合、ゼロ以外の終了ステータスでエラーを発生させる方法について何か考えはありますか? この種の動作がなければ、フラグのサポートについてコンパイラに問い合わせるのは非常に困難です。

4

1 に答える 1