本文最后更新于:2023年9月3日 下午 17:04
问题
在使用 MSVC 编译器时,如果源文件的编码格式为 UTF-8 Without
BOM,那么编译时会报错:
1 2
| [build] C:/C_CPP/Library/vcpkg/installed/x64-windows/include\fmt/format.h(1456,34): error C2001: 常量中有换行符 [D:\Code\Cpp\ExerciseCode\vscode_vcpkg_cmake\build\HelloWorld.vcxproj] [build] C:/C_CPP/Library/vcpkg/installed/x64-windows/include\fmt/format.h(1456,33): fatal error C1075: “{”: 未找到匹配令牌 [D:\Code\Cpp\ExerciseCode\vscode_vcpkg_cmake\build\HelloWorld.vcxproj]
|
原因
MSVC 默认不支持 UTF-8 Without BOM 编码格式,需要在 CMakeLists.txt
中添加以下代码:
1 2 3 4
| if(WIN32) add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>") add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>") endif()
|
完整的 CMakeLists.txt 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cmake_minimum_required(VERSION 3.17)
set(PROJECT_NAME HelloWorld) set(CMAKE_TOOLCHAIN_FILE "C:/C_CPP/Library/vcpkg/scripts/buildsystems/vcpkg.cmake") set(VCPKG_TARGET_TRIPLET "x64-windows") option(BUILD_STATIC_LIBS "Build static libraries" OFF)
project(${PROJECT_NAME})
if(WIN32) add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>") add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>") endif()
add_executable(${PROJECT_NAME} src/main.cpp) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
find_package(spdlog CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME} PUBLIC spdlog::spdlog_header_only)
|
参考
VS编译cmake工程提示
“无法识别的标记”错误解决方法