Cmake MSVC error C2065:未声明的标识符
问题描述
用cmake加MSVC工具链编译C++程序的时候出现了C2065:未声明的标识符
的报错。此前使用minGW的时候没有过这样的报错。
报错原因
问题是由于源文件的字符编码不兼容导致的。MSVC 默认使用ANSI 编码(如 GB2312 或 Shift-JIS)解析源文件,而源代码可能是UTF-8编码的,这就导致了 C2065(未声明的标识符)等错误,特别是当代码中包含非 ASCII 字符(如中文注释、字符串常量等)时。
解决方法
在CmakeLists增加:
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_options(/source-charset:utf-8 /execution-charset:utf-8)
endif()
这样就能强制 MSVC 以 UTF-8 解析代码,避免了字符编码问题引起的未声明标识符错误。