用途:指导智能体完成 C++20 模块的编写、构建与调试,涵盖命名模块与头单元的区别、模块分区、CMake 集成、编译器专用选项以及与旧式头文件的互操作。
主要能力:区分命名模块接口单元(.cppm/.ixx)、模块实现单元(.cpp)、模块分区(.cppm)和头单元;给出命名模块最小示例(export module math; export int add(...));说明分区写法(export module math:core; export import :core;);介绍头单元 import <iostream>; 与 import "myheader.h";,并指出头单元不向导入方提供宏,需宏时使用全局模块片段(module; #include <cassert>)。
使用方式:Clang 下用 clang++ -std=c++20 --precompile math.cppm -o math.pcm 生成预编译模块,再用 -fmodule-file=math=math.pcm 编译实现与消费者;GCC 下用 g++ -std=c++20 -fmodules-ts math.cppm -c -o math.o,编译器自动发现 gcm.cache/ 中的 .gcm。CMake ≥3.28 使用 FILE_SET CXX_MODULES FILES 声明接口单元,需 Ninja ≥1.11 或 MSBuild 生成器;CMake 3.25–3.27 为实验性支持,需设置 CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 与 CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP。
常见错误与限制:模块未找到多因 BMI 未在搜索路径,需先编译接口单元并检查 -fmodule-file=;模块范围内 #include 会报错,应移至全局模块片段或改用 import <>;同一模块只能有一个主接口;宏不跨模块边界;分区中同名导出会造成 ODR 违规;BMI 缓存过期需清理重建。与 C 库互操作时可在全局模块片段包含 C 头,再用 export using 重新导出关键类型。