在开启Debug mode时,编译会报错(C4189),但是不开启不会报错。
在这个文件AmiPkg\Configuration\MSFT_DEF.txt中会设置整个项目的编译选项。
可以看到在Release的编译选项中会抑制警告C4189
在模块中添加编译选项
上面是整个项目的编译选项,也可以为某个模块单独添加编译选项去抑制警告,或者其他作用。如下所示:
[BuildOptions]
# Override MSFT build option to remove code optimization /GL.
# Causes build error only if instances of AmiCryptoPkg.PeiCryptLib.lib(built with /GL) and CryptoPkg.BaseCryptLib.lib(Intrinsics.lib, compiled with /GL-) are linked
MSFT:DEBUG_*_IA32_CC_FLAGS == $(AmiCryptoLib_GL) $(AmiCryptoLib_NO_PEI_PKCS7) $(AmiCryptoLib_LTM_FAST) /nologo /c /WX /GS- /W4 /Gs32768 /O1b2 /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm
MSFT:RELEASE_*_IA32_CC_FLAGS == $(AmiCryptoLib_GL) $(AmiCryptoLib_NO_PEI_PKCS7) $(AmiCryptoLib_LTM_FAST) /nologo /c /WX /GS- /W4 /Gs32768 /O1b2 /FIAutoGen.h /EHs-c- /GR- /GF /DMDEPKG_NDEBUG#GCC:*_*_IA32_CC_FLAGS = $(AmiCryptoLib_NO_PEI_PKCS7) $(AmiCryptoLib_LTM_FAST)
GCC:*_*_IA32_CC_FLAGS = $(AmiCryptoLib_NO_PEI_PKCS7)
GCC:*_*_AARCH64_CC_FLAGS = -D_MSC_VER -DCONFIG_NO_STDOUT_DEBUG $(AmiCryptoLib_NO_PEI_PKCS7)
GCC:*_*_ARM_CC_FLAGS = -DCONFIG_NO_STDOUT_DEBUG $(AmiCryptoLib_NO_PEI_PKCS7)
使用#pragma warning抑制警告
MSVC编译器中可以使用这种方式在代码里抑制警告
#if defined(_MSC_EXTENSIONS)
//
// Disable "array is too small" warning, which is false.
//
#pragma warning (push)
#pragma warning (disable: 4295)
#endifUINT8 ACPI_OEM_ID[6] = ACPI_OEM_ID_MAK;
UINT8 ACPI_OEM_TBL_ID[8] = ACPI_OEM_TBL_ID_MAK; #if defined(_MSC_EXTENSIONS)
#pragma warning (pop)
#endif