К основному содержанию
скилл CX Codex

cpp-modules — скилл для Claude Code: модули C++20

Скилл для работы с модулями C++20: именованные модули, партиции, header units, сборка через CMake и флаги компиляторов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill cpp-modules -a claude-code
Открыть на GitHub

Что делает cpp-modules

Скилл ведёт агента по трём вещам сразу: как писать модульные единицы, как их собирать и почему сборка падает. Внутри разбор четырёх видов единиц — интерфейсный модуль, единица реализации, партиция и header unit. Отдельная таблица частых ошибок: module 'math' not found, cannot import header in module, redefinition of module, устаревший BMI-кэш. Для каждой — причина и что править.

Сборка расписана по компиляторам. Clang: --precompile даёт .pcm, дальше -fmodule-file=math=math.pcm. GCC: -fmodules-ts, файлы .gcm в gcm.cache/. CMake от 3.28 — через FILE_SET CXX_MODULES, нужен генератор с поддержкой модулей (Ninja 1.11 или MSBuild). Для CMake 3.25–3.27 в скилле лежит экспериментальный набор переменных.

Есть раздел про совместимость со старыми заголовками. Макросы через границу модуля не переходят, поэтому код, который от них зависит, уходит в Global Module Fragment — там же #include <cassert> и обёртки вроде cjson. Если у вас CMake ниже 3.25, этот скилл вам не поможет: модульная поддержка там не заведена.

Какие задачи решает

  • написать интерфейсный модуль и вынести из него объявления
  • разбить крупный модуль на партиции без нарушения ODR
  • подключить legacy-заголовок с макросами через Global Module Fragment
  • собрать модуль в Clang и GCC с нужными флагами
  • починить сборку, когда BMI-кэш устарел после правки

Примеры запросов агенту

  • Помоги написать интерфейсный модуль math.cppm с экспортом add и pi
  • Собери проект с модулями через CMake и Ninja, разложи интерфейсные единицы по FILE_SET CXX_MODULES
  • Компилятор пишет module 'math' not found — разберись, в каком порядке собирать единицы

Как установить cpp-modules

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill cpp-modules -a claude-code

2Вручную: положить файлы

~/.claude/skills/cpp-modules/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/cpp-modules/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора62

interpreters Подсказывает агенту, как устроить диспетчеризацию байткода, стековую или регистровую ВМ и простой JIT через mmap. CX Codex +1 564установок rust-ffi Ведёт агента по FFI между Rust и C: генерация биндингов через bindgen и cbindgen, безопасные обёртки, линковка системных библиотек. CX Codex +1 563установок meson Скилл для ИИ-агентов, который помогает настроить Meson, разобраться с wrap-зависимостями и кросс-компиляцией в C/C++ проектах. CX Codex +1 560установок cargo-workflows Скилл ведёт агента по воркспейсам Cargo, фичам, build.rs, кэшу сборки и аудиту зависимостей. Пригодится, когда Rust-проект разрастается до нескольких крейтов. CX Codex +1 558установок rust-security Скилл для проверки Rust-проектов на уязвимости: cargo-audit, cargo-deny, RUSTSEC, безопасный FFI, фаззинг и Miri. CX Codex +1 544установок debug-optimized-builds Помогает разобраться, почему GDB показывает «value optimized out» и как вообще отлаживать код, собранный с оптимизацией. CX Codex +1 533установок concurrency-debugging Скилл ведёт агента по отчётам ThreadSanitizer, графам блокировок Helgrind и зависшим потокам в GDB. Пригодится, когда программа падает или виснет на многопоточке. CX Codex +1 524установок linker-scripts Помогает писать и править скрипты компоновщика GNU ld для bare-metal: регионы памяти, VMA и LMA, инициализация .bss и .data. CX Codex +1 523установок

Похожие

cpp-pro https://github.com/Jeffallan Пишет, оптимизирует и отлаживает C++ с concepts, ranges, корутинами, SIMD и шаблонной метапрограммированием. Пригодится для проектов на C++20/23, где нужна производительность и чёткая типизация. CX Codex +1 5 300установок cpp-testing affaan-m Скилл ведёт агента по циклу red-green-refactor в тестах на C++17/20 и настраивает GoogleTest с CMake/CTest. Пригодится, когда тесты падают или ведут себя нестабильно. CX Codex +1 4 700установок unreal-cpp-gameplay gamedev-skills Учит агента писать геймплейный C++ под Unreal Engine 5: макросы рефлексии, классы Gameplay Framework, зависимости модуля в *.Build.cs. CX Codex +1 5 300установок cpp-coding-standards affaan-m Скилл для ИИ-агентов, который подтягивает написание и ревью C++ к C++ Core Guidelines: RAII, иммутабельность, строгая типизация. CX Codex +1 5 100установок cmake-vcpkg официальный github Правило задаёт Copilot контекст проекта на C++: vcpkg в режиме манифеста, настройки через CMakePresets.json и сборка под MSVC, Clang и GCC. ★ 40 418звёзд репо unreal-engine-cpp-pro sickn33 Скилл для разработки на C++ в Unreal Engine 5.x: правила работы с UObject, сборщиком мусора, отражением и производительностью. CX Codex +1 1 400установок

Рядом в теме «Языки программирования»

Все скиллы по теме «Языки программирования» →

Вопросы о cpp-modules

Как установить cpp-modules в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill cpp-modules -a claude-code. Скилл появится в ~/.claude/skills/cpp-modules/SKILL.md.

Что делает cpp-modules?

Подсказывает агенту, как писать и собирать модули C++20: именованные модули, партиции, header units, флаги Clang и GCC, интеграция с CMake. Плюс разбор типовых ошибок сборки.

Нужен ли особый генератор сборки для модулей в CMake?

Да, начиная с CMake 3.28 нужен генератор с поддержкой модулей — Ninja версии 1.11 и выше или MSBuild. Для CMake 3.25–3.27 в скилле описан экспериментальный режим с отдельными переменными.

Исходный текст

SKILL.md · MIT
---
name: cpp-modules
description: C++20 modules skill for modern C++ projects. Use when working with named modules, module partitions, header units, CMake MODULE_SOURCES, Clang -fmodules-ts, BMI caching issues, or migrating from headers to modules. Activates on queries about C++20 modules, import statements, module interface units, header units, or BMI files.
user-invocable: true
triggers:
  - C++20 modules
  - import statement C++
  - module interface unit
  - header units C++20
  - BMI file caching
  - cmake C++ modules
  - Clang fmodules-ts
  - migrate headers to C++ modules
---

# C++20 Modules

## Purpose

Guide agents through authoring, building, and debugging C++20 modules: named modules vs header units, module partitions, CMake integration, compiler-specific flags, and interoperability with legacy headers.

## Triggers

- "How do I write a C++20 module?"
- "How do I import a module in CMake?"
- "What's the difference between a named module and a header unit?"
- "My module gives 'cannot find module' errors"
- "How do I use C++20 modules with Clang?"
- "How do I migrate from headers to modules?"

## Workflow

### 1. Module concepts overview

```
C++20 module kinds:
├── Named module interface unit  (.cppm / .ixx)  — exports declarations
├── Module implementation unit   (.cpp)           — defines module members
├── Module partition             (.cppm)          — internal module subdivision
└── Header unit                  (any header)     — import a legacy header as module
```

Named modules are the primary target. Header units are a bridge for legacy code. Avoid Global Module Fragment unless required for macro access.

### 2. Named module — minimal example

```cpp
// math.cppm — module interface unit
export module math;          // declares the module name

export int add(int a, int b) { return a + b; }
export double pi = 3.14159;

// Non-exported (module-private)
int internal_helper() { return 42; }
```

```cpp
// main.cpp — consumer
import math;                 // import the module
#include <iostream>          // legacy header (still works)

int main() {
    std::cout << add(2, 3) << "\n";  // 5
    std::cout << pi << "\n";
}
```

### 3. Module partitions

```cpp
// math-core.cppm — partition
export module math:core;     // partition 'core' of module 'math'

export int add(int a, int b) { return a + b; }
```

```cpp
// math.cppm — primary module interface
export module math;
export import :core;         // re-export the partition
```

```cpp
// math-impl.cpp — implementation unit (no export)
module math;                 // belongs to 'math' module, not a partition
// has access to all math declarations, but exports nothing
```

### 4. Header units — bridging legacy headers

```cpp
// Import a standard library header as a module unit
import <iostream>;           // header unit (compiler generates BMI)
import <vector>;

// Or import a project header (must be compilable as header unit)
import "myheader.h";
```

Header units do NOT provide macros to importers. For macro access, use the Global Module Fragment:

```cpp
module;                      // Global Module Fragment starts here
#include <cassert>           // macros like assert() are available
export module mymod;
// ... rest of module
```

### 5. Building with Clang

```bash
# Compile module interface → produces .pcm (precompiled module)
clang++ -std=c++20 --precompile math.cppm -o math.pcm

# Compile implementation using the .pcm
clang++ -std=c++20 -fmodule-file=math=math.pcm -c math.cpp -o math.o

# Compile consumer
clang++ -std=c++20 -fmodule-file=math=math.pcm main.cpp math.o -o prog
```

### 6. Building with GCC

```bash
# GCC ≥11 supports modules (experimental ≥11, better ≥14)
# Compile interface unit → produces .gcm in gcm.cache/
g++ -std=c++20 -fmodules-ts math.cppm -c -o math.o

# Compiler auto-discovers .gcm files in gcm.cache/
g++ -std=c++20 -fmodules-ts main.cpp math.o -o prog
```

### 7. CMake integration (CMake ≥3.28)

```cmake
cmake_minimum_required(VERSION 3.28)
project(myproject LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)

add_library(math)
target_sources(math
    PUBLIC
        FILE_SET CXX_MODULES FILES    # module interface units
            src/math.cppm
            src/math-core.cppm
    PRIVATE
        src/math-impl.cpp             # implementation unit
)

add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE math)
```

```bash
# Requires a generator that supports modules (Ninja ≥1.11 or MSBuild)
cmake -S . -B build -G Ninja
cmake --build build
```

For CMake 3.25–3.27 (experimental):

```cmake
cmake_minimum_required(VERSION 3.25)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "3c375311-a3c9-4396-a187-3227ef642046")
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP ON)
```

### 8. Common errors

| Error | Cause | Fix |
|-------|-------|-----|
| `module 'math' not found` | BMI not found in search path | Compile interface unit first; check `-fmodule-file=` flags |
| `cannot import header in module` | `#include` inside module purview | Move `#include` to Global Module Fragment or use `import <>` |
| `redefinition of module 'math'` | Two `.cppm` files declare same module | Only one primary interface per module |
| `macro not available after import` | Macros don't cross module boundaries | Move macro-dependent code to GMF or use `#include` |
| `ODR violation` | Same name in multiple partitions | Each name exported from exactly one partition |
| BMI cache stale | `.pcm`/`.gcm` not rebuilt after change | Clean build or ensure dependency tracking is working |

### 9. Interop with legacy headers

```cpp
// Wrapping a C library for module use
export module cjson;

module;                       // Global Module Fragment
#include <cjson/cJSON.h>      // C header with macros

export module cjson;          // back to module purview

// Re-export key types (optional)
export using ::cJSON;
export using ::cJSON_Parse;
```

For CMake module support details, see [references/modules-cmake-support.md](references/modules-cmake-support.md).

## Related skills

- Use `skills/build-systems/build-acceleration` for PCH as a modules alternative
- Use `skills/compilers/gcc` or `skills/compilers/clang` for compiler-specific module flags
- Use `skills/build-systems/cmake` for CMake project configuration

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой