出于各种原因,我希望能够编写脚本来检测 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
好的,好的开始,但它是一个警告,它不会将退出状态设置为无效:
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
以非零退出状态出错的任何想法?如果没有这种行为,真的很难询问编译器是否支持标志。