Visual Studio 2022 以 UTF-8 编译 CMake 项目

May 14, 2022 • 预计阅读时间 1 分钟

本文适用 Visual Studio 2017 以及更高版本

默认情况下,MSVC 使用当前系统的代码页(Code Page)编译源文件,这样在编译字符串字面量的时候就和当前系统的代码页一致。

在编译别人的 CMake 项目的时候,特别是在 Linux 平台下开发的项目,源文件默认使用 UTF-8 编码,如果在源码中出现 Unicode 字符,编译就会报错:

例如编译 nlohmann/json

json\tests\src\unit-class_parser.cpp(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
json\tests\src\unit-class_parser.cpp(466): error C2001: 常量中有换行符
json\tests\src\unit-class_parser.cpp(467): error C2001: 常量中有换行符
json\tests\src\unit-class_parser.cpp(779): error C2001: 常量中有换行符
json\tests\src\unit-class_parser.cpp(466): fatal error C1057: 宏扩展中遇到意外的文件结束

使用编译参数 /utf-8 解决这个问题,在 CMakeSettings.json 里添加 CMake 命令参数

-D CMAKE_CXX_FLAGS=/utf-8

参考资料

Set source and execution character sets to UTF-8

跨平台源码编辑

以上解决了编译问题,编辑源文件的时候需要定义一个 EditorConfig 文件定义项目全局的格式与项目保持一致,例如字符编码、换行和缩进等。

在项目根目录下新建一个名为 .editorconfig 的文本文件,内容如下:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space

参考资料

Create portable, custom editor settings with EditorConfig

CMake
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Visual Studio 2022 中使用 Clang

制作 Visual Studio 2022 离线安装包