---
url: /examples/cpp/cxx-modules.md
---
# C++ Modules Usage & Examples

## Introduction

Xmake uses `.mpp` as the default module extension, but also supports `.ixx`, `.cppm`, `.mxx`, etc. It fully supports C++20 Modules with gcc11/clang/msvc, and can automatically analyze module dependencies for maximum parallel compilation.

## Basic Example

## Class Example

Exporting classes in modules:

## Module Partitions

Using module partitions:

## Shared Library Modules

Creating a shared library with modules:

## Cross-Target Dependency

Modules dependency between targets:

## Private Module Fragment

Using private module fragment to hide implementation details:

## Module Implementation Unit

Separating module interface and implementation:

## Module Aggregation

Using `export import` to aggregate submodules:

## Cpp-only Project with Modules

From v2.7.1, Headerunits are supported. Normally, at least one `.mpp` file is needed to enable modules, but you can also force it:

## Headerunits Example

See [headerunits example](https://github.com/xmake-io/xmake/tree/dev/tests/projects/c%2B%2B/modules/headerunits) for how to use STL or custom headers as headerunits.

## C++23 Standard Library Modules

Support for C++23 stdmodules:

## Module Package Distribution

Define and distribute a C++ Modules package:

## Module Package Integration

Quickly integrate with `add_requires("foo")`:

> More official examples: [C++ Modules Examples](https://github.com/xmake-io/xmake/tree/dev/tests/projects/c%2B%2B/modules)
