windows下,使用msys2解决烦人的-fmodules-ts
问题产生
我的环境是 windows11 + MSYS2 + cmake + Ninja。
MSYS2 使用 GCC 15.1.0 x86_64-w64-mingw32(urct64),cmake 就直接用默认工具包生成了。
长期将cmake定格为 3.10 的我这次突然心血来潮定格为 4.0。
生成之后,我的 clangd 就在 main.cpp 下爆出了三个离谱的错误:
Unknown argument: '-fmodules-ts'clang(drv_unknown_argument)
Unknown argument: '-fmodule-mapper=CMakeFiles\project.dir\src\main.cpp.obj.modmap'clang(drv_unknown_argument)
Unknown argument: '-fdeps-format=p1689r5'clang(drv_unknown_argument)
但正常项目是没有任何问题的——我并没有在项目使用 module 特性,这是怎么回事呢?
问题解决过程
首先查看 compile_commands.json
[
{
"directory": "project/build",
"command": "g++ -DTCOD_NO_THREADS -isystem project/submodules/vcpkg/installed/x64-mingw-dynamic/include -O3 -DNDEBUG -std=gnu++23 -fmodules-ts -fmodule-mapper=CMakeFiles\\project.dir\\src\\main.cpp.obj.modmap -MD -fdeps-format=p1689r5 -x c++ -o CMakeFiles\\project.dir\\src\\main.cpp.obj -c project\\src\\main.cpp",
"file": "project\\src\\main.cpp",
"output": "CMakeFiles\\project.dir\\src\\main.cpp.obj"
}
]
发现使用了 -fmodules-ts -fmodule-mapper 指令,这是启动 c++ 的 module 机制。
在 cmake 禁止 module 后重新生成发现没什么用。
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API OFF)
检查程序还能够继续运行无意外,那么问题就要定位到 clangd 了。
查询支持情况后,发现是 clang 目前只支持部分 module,clang 无法理解这三个参数,clangd 自然要报错了。
解决
处于无任何问题,是msys2 内 clangd 支持问题,在.clangd 里忽略这些报错就可以了。
添加如下配置:
Remove:
- "-fmodules-ts"
- "-fdeps-format=p1689r5"
- "-fmodule-mapper=*"
重启 clangd 即可解决。

浙公网安备 33010602011771号