使用gcc-11构建C++20模块时如何修改gcm.cache路径
GCC 11自定义C++20模块缓存gcm.cache路径的实现方法
GCC 11没有直接等价于Clang的-fmodules-cache-path的编译选项,可通过以下两种方案实现路径自定义:
- 方案一:编译时切换工作目录
GCC默认会在执行编译命令的当前工作目录下生成gcm.cache目录,你可以在调用gcc前切换到你指定的缓存存放目录,再通过相对路径引用源文件执行编译,示例命令如下:
后续编译依赖该模块的其他代码时,需要额外添加# 假设目标缓存存放路径为build/modules mkdir -p build/modules cd build/modules g++-11 -std=c++20 -fmodules-ts -c ../../src/xxx.cppm-fmodule-path=build/modules参数让GCC能定位到对应缓存文件。 - 方案二:通过
-fmodule-output参数指定模块输出路径
编译模块接口单元时,直接指定生成的gcm文件的完整路径,此时GCC不会自动生成gcm.cache目录,示例命令如下:g++-11 -std=c++20 -fmodules-ts -fmodule-output=build/modules/xxx.gcm -c src/xxx.cppm如果你是在xmake中集成该能力,方案二的适配成本更低,你可以在自定义的C++模块编译规则中,为每个模块接口文件动态生成对应的输出路径参数,同时全局维护统一的模块搜索路径即可。
额外说明:GCC 13及以上版本已经正式新增了-fmodules-cache-path=<路径>编译选项,和Clang的对应选项用法完全一致,后续升级GCC版本可直接使用该选项简化配置。
内容的提问来源于stack exchange,提问作者ruki
相关产品推荐
相关产品推荐

