mcpp: Een moderne build-tool voor C++ met focus op modules

Belangrijkste kenmerken

  • Ingebouwde ondersteuning voor C++23-modules: Automatische afhandeling van import std, incrementele builds op bestandsniveau, automatische analyse van module-afhankelijkheden en nul handmatige configuratie.
  • Pure modulaire self-hosting: mcpp bestaat zelf uit meer dan 43 C++23-modules en bouwt zichzelf; de module-pipeline is uitvoerig getest.
  • Direct klaar voor gebruik: Installatie met één commando. Gebundelde GCC 16 / LLVM 20 toolchains worden gedownload in een geïsoleerde sandbox, waardoor je systeem schoon blijft.
  • Geïntegreerd afhankelijkheidsbeheer: SemVer-resolutie van restricties, lockfile, cross-project BMI-cache en aangepaste pakketindexen.
  • Multi-pakket workspaces: Eén centrale lockfile en versiebeheer voor grotere projecten.

Waarom mcpp?

mcpp is specifiek gebouwd voor ontwikkeling waarbij C++23-modules centraal staan. Voor wie import std, module interface units (.cppm), module partitions en andere moderne C++-functies wil gebruiken, biedt mcpp een soepele ervaring op Linux, macOS ARM64 en Windows x86_64.

  • Standaard modulair: Projecten die zijn aangemaakt met mcpp new maken direct gebruik van C++23-modules; import std werkt simpelweg direct.
  • Incrementele builds op bestandsniveau: Een drie-laags optimalisatie gebaseerd op P1689 dyndep (front-end dirty check + per-bestand scannen + BMI restat). Alleen modules die daadwerkelijk zijn gewijzigd, worden opnieuw gecompileerd.
  • Aanmaken en bouwen in één keer: Met mcpp new hello && cd hello && mcpp build worden toolchains automatisch geïnstalleerd zonder dat er handmatige configuratie van de compiler of het build-systeem nodig is.
  • Een modulair ecosysteem: mcpplibs biedt een groeiende set direct importeerbare C++ module-bibliotheken, naast ondersteuning voor eigen pakketindexen.
Let op: mcpp bevindt zich in een vroeg stadium van ontwikkeling; interfaces en gedrag kunnen veranderen in toekomstige releases. Ontwikkelaars die geïnteresseerd zijn in moderne build-tools voor C++ modules zijn welkom om bij te dragen. Vragen, feedback of ideeën kunnen worden ingediend via de issues.

Aan de slag

Installatie

Via xlings (aanbevolen)

xlings install mcpp -y

Mocht je xlings nog niet hebben:

  • Linux / macOS: curl -fsSL https://d2learn.org/xlings-install.sh | bash
  • Windows (PowerShell): irm https://d2learn.org/xlings-install.ps1.txt | iex

Optioneel: Korte commando's (mp, mbuild, mrun, …)

Installeer de shims via: xlings install mcpp-short-cmd -y

Dit registreert 30 aliassen zodat bijvoorbeeld mcpp build wordt mbuild. De naamgevingsregel is: de beginletter van elk woord behalve het laatste, plus het volledige laatste woord (bijv. mcpp self doctormsdoctor). mp staat voor het basiscommando mcpp.

Kort commandoVolledig commandoKort commandoVolledig commando
mpmcppmexpkgmcpp emit xpkg
mnewmcpp newmxparsemcpp xpkg parse
mbuildmcpp buildmtinstallmcpp toolchain install
mrunmcpp runmtlistmcpp toolchain list
mtestmcpp testmtdefaultmcpp toolchain default
mcleanmcpp cleanmcdirmcpp cache dir
maddmcpp addmclistmcpp cache list
mremovemcpp removemcinfomcpp cache info
mupdatemcpp updatemcgcmcpp cache gc
msearchmcpp searchmilistmcpp index list
mpublishmcpp publishmiaddmcpp index add
mpackmcpp packmiremovemcpp index remove
msdoctormcpp self doctormiupdatemcpp index update
msenvmcpp self envmsconfigmcpp self config
msversionmcpp self versionmsexplainmcpp self explain

Andere installatie-opties

  • Optie 1: One-line installer (Linux x86_64/aarch64, macOS ARM64)

curl -fsSL https://github.com/mcpp-community/mcpp/releases/latest/download/install.sh | bash Installeert in ~/.mcpp/ en voegt dit toe aan de shell PATH. Verwijderen van deze map verwijdert de tool volledig. (Niet ondersteund op Windows).

  • Optie 2: Homebrew (macOS / Linux)

brew install mcpp-community/mcpp/mcpp-m Vereist Apple Silicon + macOS 14 voor macOS gebruikers. Gebruikt de formule mcpp-m om verwarring met een andere C-preprocessor genaamd mcpp te voorkomen.

  • Optie 3: Arch Linux (AUR)

yay -S mcpp-bin (voorbebouwde binary) of yay -S mcpp-m (bouwen uit bronnen).

  • Optie 4: Installatie via AI-assistent

Kopieer de volgende prompt naar je AI-coding assistant (Claude Code, Cursor, Copilot, etc.): "Read the README of https://github.com/mcpp-community/mcpp, then install mcpp for me and create a C++23 module project, build and run it."

Een project maken, bouwen en uitvoeren

mcpp new hello
cd hello
mcpp build
mcpp run

Let op: De eerste build initialiseert de omgeving en haalt de toolchain op, wat enige tijd kan duren.

Projectstructuur

hello/
├── mcpp.toml             ← project manifest
├── src/
│   └── main.cpp          ← import std; werkt direct
└── tests/
    └── test_smoke.cpp    ← wordt automatisch gevonden door `mcpp test`

Voorbeeld mcpp.toml:

[package]
name        = "hello"
version     = "0.1.0"
description = "A modular C++23 package"
license     = "Apache-2.0"

De ingebouwde scaffold vertrouwt op conventies: src/main.cpp wordt herkend als het binary target en tests/test_smoke.cpp wordt automatisch gedetecteerd door mcpp test.

Gebruik van module-bibliotheken

Voeg een afhankelijkheid toe aan mcpp.toml om een community module-bibliotheek uit mcpplibs te importeren:

[dependencies]
cmdline = "0.0.2"

Importeer deze vervolgens direct in je code:

import mcpplibs.cmdline;

Overzicht van functies

Build-systeem

  • Ondersteuning voor C++20/23/26 modules (interface units, implementation units, module partitions), inclusief experimentele c++latest / c++fly modi.
  • Volledig automatische precompilatie en caching van import std / import std.compat.
  • Drie-laags incrementele optimalisatie: front-end dirty check + per-bestand P1689 dyndep + BMI copy-if-different restat.
  • Fingerprinted BMI-cache: gehasht op basis van compiler/flags/standaardbibliotheek, deelbaar tussen projecten.
  • Ninja backend: automatisch gegenereerde build.ninja voor parallelle compilatie.
  • Automatische generatie van compile_commands.json (geschikt voor clangd / ccls).
  • Eersteklas C-ondersteuning: .c-bestanden worden automatisch gedetecteerd; ondersteuning voor gemengde C/C++ projecten.
  • Gebruikersdefinieerbare cflags, cxxflags, ldflags en c_standard.

Toolchain-beheer

  • Gebundelde GCC 16.1.0 + LLVM/Clang 20.1.7, installatie via één commando.
  • Host-bewuste standaardwaarden: native glibc GCC op Linux x86_64, musl GCC op andere Linux-architecturen, LLVM op macOS en Windows (met MSVC), MinGW-w64 GCC op 'bare' Windows.
  • Meerdere versies naast elkaar: mcpp toolchain install gcc 16 / mcpp toolchain install llvm 20.
  • Geïsoleerde sandbox: alle toolchains staan in ~/.mcpp/registry/, waardoor het systeem ongewijzigd blijft.
  • Per platform selectie: linux = "gcc@16", macos = "llvm@20".
  • Gelijkwaardige compile-pipelines voor GCC en Clang via de BmiTraits abstractielaag.

Pakket- & afhankelijkheidsbeheer

  • SemVer restrictie-resolutie: ^, ~, ranges, exacte versies.
  • Drie-traps resolutie: constraint merging → multi-version mangling fallback → exact match.
  • Lockfile mcpp.lock (v2 formaat: index snapshot + namespaces).
  • Namespace systeem: [dependencies.myteam] foo = "1.0".
  • Aangepaste pakketindexen: [indices] acme = "git@..." / { path = "..." }.
  • Project-specifieke index isolatie via de .mcpp/ directory.
  • Bronnen voor afhankelijkheden: index, Git of lokaal pad.

Workspaces

  • Configuratie via [workspace] members = ["libs/", "apps/"].
  • Gedeelde lockfile en gedeelde target-directory.
  • Centraal versiebeheer via [workspace.dependencies] + .workspace = true.
  • Selectieve builds: mcpp build -p member-name.
  • Configuratie-overerving: toolchains, build-flags en indexen cascaderen van de root naar de members.

Packaging & Publishing

  • mcpp pack: Vier Linux release-modi — system / vendored (standaard) / self-contained / static.
  • Volledig statische musl binaries: distributie in één enkel bestand zonder glibc-afhankelijkheid.
  • mcpp publish: genereert xpkg.lua en publiceert naar een pakketindex.
  • Automatische RPATH fix-up via patchelf (Linux).

Developer Experience

  • mcpp new: Maak een modulair project; gebruik --template <pkg>[@ver][:<tmpl>] voor bibliotheek-templates (bijv. --template imgui).
  • mcpp run [-- args]: Bouwen en uitvoeren.
  • mcpp test [pattern] [-- args]: Automatische detectie en uitvoering van tests.
  • mcpp search: Zoeken in pakketindexen.
  • mcpp add / remove / update: Beheer van afhankelijkheden.
  • mcpp why [toolchain|runtime|deps]: Uitleg over gemaakte build-beslissingen.
  • mcpp --offline: Gebruik enkel lokaal beschikbare staat.
  • mcpp explain E0001: Gedetailleerde uitleg van foutcodes.
  • mcpp self doctor: Zelfdiagnose van de omgeving.

Platformondersteuning

Een toolchain wordt gedefinieerd als familie@versie (gcc | llvm | msvc) en een target als een triple arch-os[-env]. Cross-compiling gebeurt via mcpp build --target <triple>.

Hosts (waar mcpp op draait): Linux x8664 / aarch64, macOS arm64, Windows x8664.

Targets:

TargetConventionele ToolchainStatus
x86_64-linux-gnugcc (Linux default) of llvm
x86_64-linux-muslgcc 16, volledig statisch
aarch64-linux-muslgcc 16, volledig statisch
x86_64-windows-gnugcc 16 MinGW-w64 (Windows default zonder VS)
x86_64-windows-msvcmsvc@system of llvm (Windows default met VS)
aarch64-macosllvm (macOS default)
riscv64-linux-musl🔄
aarch64-linux-gnu🔄
x86_64-macos🔄

� Geverifieerd (CI bouwt en executeert end-to-end) $\mid$ 🔄 Gepland.

Opmerking over Windows: Op Windows target LLVM de MSVC ABI en vereist dus MSVC BuildTools of Visual Studio. Indien mcpp geen bruikbare MSVC vindt, schakelt het automatisch over naar x86_64-windows-gnu (winlibs MinGW-w64), wat volledig self-contained is en geen externe installatie vereist.

Projecten die mcpp gebruiken

ProjectBeschrijving
mcppmcpp zelf — 43+ C++23 modules, volledig self-hosted
xlingsDe fundering voor toolchain- en pakketbeheer waarop mcpp bouwt
tinyhttpsMinimale C++23 HTTP/HTTPS client met SSE streaming
llmapiModerne C++ LLM API client (OpenAI-compatibel)
imgui-mDear ImGui als een C++23 module pakket
cmdlineBibliotheek voor command-line parsing (wordt door mcpp gebruikt)

Bijdragen

Bijdragen via issues en PR's zijn welkom, inclusief bijdragen ontwikkeld met AI-agents.

Basis workflow

  1. Open een issue: Start een discussie over bugfixes of nieuwe functies.
  2. Implementeer de wijziging: Fork het repo, maak een branch en verifieer de wijzigingen (mcpp build + tests).
  3. Submit een PR: Gebruik gh pr create en zorg dat de CI slaagt.
  4. Commit conventie: Gebruik prefixes zoals feat:, fix:, test:, docs:, refactor:.

Voor AI-agents is er een specifieke workflow beschikbaar in .agents/skills/mcpp-contributing/SKILL.md.

Community & Ecosysteem

  • Community Forum: Chatgroep (QQ: 1067245099).
  • mcpp-index: De standaard pakketindex.
  • mcpplibs: Collectie van modulaire C++ bibliotheken.

Erkenningen

Inspiratie en afhankelijkheden:

  • xlings: Fundering voor toolchain/pakketbeheer.
  • mcpplibs.cmdline: CLI framework.
  • ninja: Onderliggende build engine.
  • xmake: Cross-platform build tool.
  • cargo: Rust package manager.