近来使用gcc和cmake时遇到gcc无法处理中文路径的问题。报错如下。
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/dony/桌面/testc/build --config Debug --target all --
[build] [2/8 12% :: 0.102] Scanning '/home/dony/桌面/testc/main.cpp' for CXX dependencies
[build] FAILED: [code=1] CMakeFiles/testc.dir/Debug/main.cpp.o.ddi
[build] /usr/bin/g++ -DCMAKE_INTDIR=\"Debug\" -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fstack-clash-protection -Wall -Wextra -Wpedantic -g -O1 -gdwarf-5 -fdiagnostics-color=always -fno-omit-frame-pointer -std=gnu++23 -fPIE -fdiagnostics-color=always -E -x c++ '/home/dony/桌面/testc/main.cpp' -MT CMakeFiles/testc.dir/Debug/main.cpp.o.ddi -MD -MF CMakeFiles/testc.dir/Debug/main.cpp.o.ddi.d -fmodules-ts -fdeps-file=CMakeFiles/testc.dir/Debug/main.cpp.o.ddi -fdeps-target=CMakeFiles/testc.dir/Debug/main.cpp.o -fdeps-format=p1689r5 -o CMakeFiles/testc.dir/Debug/main.cpp.o.ddi.i
[build] /home/dony/桌面/testc/main.cpp:3:10: error: cannot determine ‘#include’ translation of /home/dony/桌面/testc/hello.hpp: malformed string 'ERROR 'unrecognized \'INCLUDE-TRANSLATE \'/home/dony/桌面/testc/hello.hpp\'\'''
[build] 3 | #include "hello.hpp"
[build] | ^~~~~~~~~~~
[build] [2/8 25% :: 0.222] Scanning '/home/dony/桌面/testc/hello.cpp' for CXX dependencies
[build] ninja: build stopped: subcommand failed.
[proc] The command: /usr/bin/cmake --build /home/dony/桌面/testc/build --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:00.294
[build] Build finished with exit code 1经过试验,设置cmake_minimum_required为3.27以上并将CMAKE_CXX_STANDARD设置为20以上会开启对module的支持,这就是错误的原因,gcc scan module deps有问题:处理带中文路径失败。以下方法均可解决问题。
- 设置
cmake_minimum_required为3.27及以下 - 设置
CMAKE_CXX_SCAN_FOR_MODULES为OFF - 使用
MSVC或clang
其中前两种方法都是关闭cmake对module的支持,第三种方法是MSVC或clang没有这个问题。
另外的,近来GCC已经有人针对这个问题提了个issue,并有patch了,只能期待在版本号到16时会到release上。