文章目录
- 1. 问题复述
- 2. 问题原因
- 3. 解决方案
1. 问题复述
项目一直在linux下编译,这次偶然要在windows下使用msvc编译,结果一堆报错,根据报错信息发现语法也没有问题,报错信息如下:
查找文献说是因为有中文注释导致的,使用正则表达式将所有中文消除后,发现还是报错,这时候发现文件编码还是utf-8。
2. 问题原因
在使用 CMake 调用 MSVC 编译 C 项目时,如果遇到因中文注释导致的编译错误,通常是因为 MSVC 编译器对 UTF-8 编码的源代码支持存在限制。
3. 解决方案
-
方法1: 把所有源文件的编码都从utf8改为UTF-8 with BOM或简体中文(不太现实)
-
方法2: 使用MSVC预处理指令(工作量也巨大)
在每个源代码文件开头都加入MSVC的预处理指令,以启用UTF-8支持
#if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif
或直接添加
#pragma execution_character_set("utf-8")
-
方法3: 在 CMakeLists.txt 文件中为 MSVC 编译器添加 /utf-8 编译选项,以确保 MSVC 能够正确处理 UTF-8 编码的源文件 (首荐)
if(MSVC)add_compile_options("/utf-8") endif()
但要注意,要确保源文件中没有声明
#pragma execution_character_set
,即确保只使用一种方法来指定编码。否则将报:在已指定 /source-charset、/execution-charset 或 /utf-8 时,不支持 #pragma execution_character_set xxxxxxxxxx
参考链接:
- https://blog.csdn.net/a462533587/article/details/125461959
- https://blog.csdn.net/qq_41632571/article/details/126996802