MSVC编译器设置:将警告视为错误并忽略特定警告时遇D8021错误
问题描述
我参考MSVC编译器警告级别相关文档,想要配置编译器将所有警告视为错误,同时忽略指定的特定警告,但执行以下命令时出现错误:
set _CL_="-WX -WD28020 -WD28112 -WD28132 -WD28159 -WD28182 -WD28195 -WD28196 -WD28197 -WD28204 -WD28213 -WD28218 -WD28251 -WD28252 -WD28253 -WD28285 -WD28301 -WD28649 -WD28716 -WD28719 -WD6001 -WD6011 -WD6031 -WD6054 -WD6101 -WD6221 -WD6226 -WD6239 -WD6244 -WD6255 -WD6258 -WD6262 -WD6276 -WD6287 -WD6294 -WD6313 -WD6314 -WD6326 -WD6336 -WD6340 -WD6385 -WD6387 -WD6388 -WD6506 -WD6518 -WD6553 -WDA1416 -WDA2200 -WDR64 -WD0436 -WD0618 -WD0649 -WD3003"
错误信息如下:
cl : Command line error D8021: invalid numeric argument '/WX -WD28020 -WD28112 -WD28132 -WD28159 -WD28182 -WD28195 -WD28196 -WD28197 -WD28204 -WD28213 -WD28218 -WD28251 -WD28252 -WD28253 -WD28285 -WD28301 -WD28649 -WD28716 -WD28719 -WD6001 -WD6011 -WD6031 -WD6054 -WD6101 -WD6221 -WD6226 -WD6239 -WD6244 -WD6255 -WD6258 -WD6262 -WD6276 -WD6287 -WD6294 -WD6313 -WD6314 -WD6326 -WD6336 -WD6340 -WD6385 -WD6387 -WD6388 -WD6506 -WD6518 -WD6553 -WDA1416 -WDA2200 -WDR64 -WD0436 -WD0618 -WD0649 -WD3003' [C:\WindowsFabric\src\prod\ktl\src\tools\tests\KernelLib\KmUnitKernel.vcxproj] cl : Command line error D8021: invalid numeric argument '/WX -WD28020 -WD28112 -WD28132 -WD28159 -WD28182 -WD28195 -WD28196 -WD28197 -WD28204 -WD28213 -WD28218 -WD28251 -WD28252 -WD28253 -WD28285 -WD28301 -WD28649 -WD28716 -WD28719 -WD6001 -WD6011 -WD6031 -WD6054 -WD6101 -WD6221 -WD6226 -WD6239 -WD6244 -WD6255 -WD6258 -WD6262 -WD6276 -WD6287 -WD6294 -WD6313 -WD6314 -WD6326 -WD6336 -WD6340 -WD6385 -WD6387 -WD6388 -WD6506 -WD6518 -WD6553 -WDA1416 -WDA2200 -WDR64 -WD0436 -WD0618 -WD0649 -WD3003' [C:\WindowsFabric\src\prod\src\Reliability\ROS-api\interfacing\lib\ROSInterfacingLib.vcxproj] cl : Command line error D8021: invalid numeric argument '/WX -WD28020 -WD28112 -WD28132 -WD28159 -WD28182 -WD28195 -WD28196 -WD28197 -WD28204 -WD28213 -WD28218 -WD28251 -WD28252 -WD28253 -WD28285 -WD28301 -WD28649 -WD28716 -WD28719 -WD6001 -WD6011 -WD6031 -WD6054 -WD6101 -WD6221 -WD6226 -WD6239 -WD6244 -WD6255 -WD6258 -WD6262 -WD6276 -WD6287 -WD6294 -WD6313 -WD6314 -WD6326 -WD6336 -WD6340 -WD6385 -WD6387 -WD6388 -WD6506 -WD6518 -WD6553 -WDA1416 -WDA2200 -WDR64 -WD0436 -WD0618 -WD0649 -WD3003' [C:\WindowsFabric\src\prod\src\Reliability\ROSService\lib\ROSServiceLib.vcxproj] C:\.tools\CxCache\Wix.Corext.3.14.0.1119\wix2010.targets(1025,5): error MSB4181: The "MSBuild" task returned false but did not log an error.
解决方法
问题根源是给_CL_变量赋值时加了外层双引号,导致整个字符串被编译器识别为单个参数,而非多个独立的选项集合,自然无法解析这个包含大量选项的“数值参数”。
正确的设置方式是去掉外层双引号,直接赋值:
set _CL_=-WX -WD28020 -WD28112 -WD28132 -WD28159 -WD28182 -WD28195 -WD28196 -WD28197 -WD28204 -WD28213 -WD28218 -WD28251 -WD28252 -WD28253 -WD28285 -WD28301 -WD28649 -WD28716 -WD28719 -WD6001 -WD6011 -WD6031 -WD6054 -WD6101 -WD6221 -WD6226 -WD6239 -WD6244 -WD6255 -WD6258 -WD6262 -WD6276 -WD6287 -WD6294 -WD6313 -WD6314 -WD6326 -WD6336 -WD6340 -WD6385 -WD6387 -WD6388 -WD6506 -WD6518 -WD6553 -WDA1416 -WDA2200 -WDR64 -WD0436 -WD0618 -WD0649 -WD3003
去掉双引号后,-WX、-WDxxxx等每个选项都会被解析为独立的编译器参数,即可正常生效。另外建议确认所有忽略的警告编号均为有效的MSVC警告码,避免因无效编号引发其他错误。
内容的提问来源于Stack Exchange,提问作者Node.JS
相关产品推荐
相关产品推荐

