Skip to content
/ maud Public

Build convention for c++ modules, implemented in cmake

License

Notifications You must be signed in to change notification settings

bkietz/maud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b981224 · Mar 1, 2025
Nov 5, 2024
Mar 1, 2025
Mar 1, 2025
Feb 27, 2025
Jul 15, 2024
Feb 17, 2025
Jul 9, 2024
Feb 12, 2025
Feb 24, 2025
Feb 24, 2025
Nov 5, 2024
Jul 28, 2024
Aug 17, 2024
Nov 5, 2024
May 15, 2024
May 30, 2024
Feb 24, 2025
Aug 5, 2024
Oct 23, 2024
Mar 1, 2025
Aug 9, 2024
Feb 24, 2025
Feb 17, 2025
Nov 3, 2024
Nov 3, 2024
Nov 3, 2024
Feb 24, 2025
Nov 5, 2024
Aug 23, 2024
Mar 1, 2025
Aug 21, 2024
Mar 1, 2025
May 15, 2024
Feb 19, 2025
Feb 24, 2025
Feb 24, 2025
Nov 8, 2024
Aug 21, 2024
Nov 15, 2024

Repository files navigation

Maud

Maud simplifies building C++ projects by reducing configuration boilerplate.

$ ls
hello.cxx

$ cat hello.cxx
#include <iostream>

import executable;

int main() {
  std::cout << "hello world!" << std::endl;
}

$ maud --quiet

$ .build/Debug/hello
hello world!

Maud bootstraps a cmake build directory with excellent defaults and batteries included. Maud makes building with C++20 modules straightforward. Other features include performant and expressive globbing, first class support for generated files, inference of compilation/link/test targets from source files, built-in targets for rendering gorgeous documentation, expanded capabilities for declaring and resolving build options, and more.

Getting Started

Maud is itself a Maud-based project. Build with:

$ git clone https://github.com/bkietz/maud.git && cd maud

# get dependencies with flox
$ flox activate

$ maud --log-level=VERBOSE # Pass cmake -D options etc here

# optionally, install:
$ cmake --install .build --config Debug

Maud uses Ninja Multi-Config by default, but recent versions of MSVC/Visual Studio also support C++20 modules.

If you don't already have the maud executable on your PATH, you can bootstrap using:

$ cmake -P cmake_modules/maud_cli.cmake -- --log-level=VERBOSE
# ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
#   (the maud executable is just an alias for this anyway)