meson — Claude Code skill: build C/C++ projects
A skill that walks AI agents through Meson setup, wrap dependencies and cross-compilation for C/C++ projects.
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a claude-codeWhat meson does
The skill covers the full Meson workflow: project setup with meson setup, building, testing and installing. It ships templates for meson.build, a table mapping --buildtype values to compiler flags, and examples of meson_options.txt with boolean, combo and integer options. Your agent gets concrete patterns for dependency(), include_directories and linking a static library into an executable.
A separate section handles the wrap system: searching with meson wrap search, installing from wrapdb, listing and updating wraps. It shows how to set a fallback in meson.build so a wrap kicks in when the system library is missing. For cross-compilation there is a cross-file example with [binaries], [properties] and [host_machine] sections — enough to target ARM.
There is also a CMake migration cheatsheet: add_executable becomes executable(), find_package becomes dependency(), add_subdirectory becomes subdir(). Meson uses Ninja as its backend, so fine-tuning the build often means reading Ninja docs too. If your project already builds with CMake and the team knows it well, migrating means rewriting every build file — worth sizing up before you start.
What it helps with
- set up a Meson build for a C/C++ project from scratch
- add an external dependency through wrap when no system library exists
- cross-compile for ARM with a cross file
- rewrite build files from CMake to Meson
- define build options in
meson_options.txtand read them inmeson.build
Example prompts for the agent
- Help me set up
meson setup builddirfor a C project with LTO and sanitizers - How do I add zlib through wrap if the system version won't work?
- Convert this CMakeLists to meson.build
How to install meson
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a claude-code2Manually: put the files in place
~/.claude/skills/meson/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/meson/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a codex2Manually: put the files in place
.agents/skills/meson/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a cursor2Manually: put the files in place
.cursor/skills/meson/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills meson2Manually: put the files in place
.github/skills/meson/SKILL.md1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a gemini-cli2Platform CLI
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/build-systems/mesonManually: put the files in place
.devin/skills/meson/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill meson -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about meson
How do I install the meson skill in Claude?
Run npx skills add mohitmishra786/low-level-dev-skills --skill meson -a claude-code. The skill lands in ~/.claude/skills/meson/SKILL.md.
What does the meson skill do?
It guides an agent through Meson project setup, build option configuration, wrap dependency management and cross-compilation. It activates on queries about meson setup, meson compile, meson wrap, meson test, cross files and meson.build.
How is it different from the cmake skill?
Use the cmake skill when a project builds with CMake. Use the meson skill when it uses Meson or you are migrating from CMake and Autotools. The skill includes a command mapping cheatsheet.
Source text
SKILL.md · MIT
---
name: meson
description: Meson build system skill for C/C++ projects. Use when setting up a Meson project, configuring build options, managing dependencies with the wrap system, cross-compiling, or integrating Meson with CI. Activates on queries about meson setup, meson compile, meson wrap, meson test, cross-file, meson.build, or migrating from CMake/Autotools to Meson.
---
# Meson
## Purpose
Guide agents through Meson project setup, build configuration, the wrap dependency system, and cross-compilation — covering the build system used by GLib, systemd, GStreamer, Mesa, and many major C/C++ projects.
## Triggers
- "How do I set up a Meson build?"
- "How do I add a dependency in Meson?"
- "How do I cross-compile with Meson?"
- "Meson wrap isn't finding my dependency"
- "How do I configure build options in Meson?"
- "How do I migrate from CMake/Autotools to Meson?"
## Workflow
### 1. Project setup
```bash
# Configure (source-dir, build-dir are positional)
meson setup builddir
# With options
meson setup builddir \
--buildtype=release \
--prefix=/usr/local \
-Db_lto=true \
-Db_sanitize=address
# Reconfigure (change options on existing builddir)
meson configure builddir -Dbuildtype=debug
# Show all available options
meson configure builddir
```
| `--buildtype` | Equivalent flags |
|---------------|-----------------|
| `debug` (default) | `-O0 -g` |
| `debugoptimized` | `-O2 -g` |
| `release` | `-O3 -DNDEBUG` |
| `minsize` | `-Os -DNDEBUG` |
| `plain` | No flags added |
### 2. Build and test
```bash
# Build (from source directory)
meson compile -C builddir
# Or enter builddir and use ninja directly
cd builddir && ninja
# Run tests
meson test -C builddir
meson test -C builddir --verbose # show test output
meson test -C builddir -t 5 # 5x timeout multiplier
meson test -C builddir --suite unit # run only 'unit' suite
# Install
meson install -C builddir
# Dry run
meson install -C builddir --dry-run
```
### 3. meson.build structure
```python
project('myapp', 'c', 'cpp',
version : '1.0.0',
default_options : [
'c_std=c11',
'cpp_std=c++17',
'warning_level=2',
]
)
# Find system dependencies
glib_dep = dependency('glib-2.0', version : '>=2.68')
threads_dep = dependency('threads')
# Include directories
inc = include_directories('include')
# Library
mylib = static_library('mylib',
sources : ['src/lib.c', 'src/util.c'],
include_directories : inc,
)
# Executable
executable('myapp',
sources : ['src/main.c'],
include_directories : inc,
link_with : mylib,
dependencies : [glib_dep, threads_dep],
install : true,
)
# Tests
test('basic', executable('test_basic',
sources : ['tests/test_basic.c'],
link_with : mylib,
))
```
### 4. Dependency management with wrap
```bash
# Search for a wrap
meson wrap search zlib
# Install a wrap (downloads .wrap file from wrapdb)
meson wrap install zlib
meson wrap install gtest
# List installed wraps
meson wrap list
# Update all wraps
meson wrap update
```
In `meson.build`:
```python
# Use wrap as fallback if system lib not found
zlib_dep = dependency('zlib',
fallback : ['zlib', 'zlib_dep'], # [wrap_name, dep_variable]
)
# Force wrap (for reproducible builds)
zlib_dep = dependency('zlib',
fallback : ['zlib', 'zlib_dep'],
default_options : ['default_library=static'],
)
```
`subprojects/zlib.wrap` structure:
```ini
[wrap-file]
directory = zlib-1.3
source_url = https://zlib.net/zlib-1.3.tar.gz
source_hash = <sha256>
[provide]
zlib = zlib_dep
```
### 5. Build options
Define in `meson_options.txt` (or `meson.options` in Meson ≥1.1):
```python
option('with_tests', type : 'boolean', value : true,
description : 'Build unit tests')
option('backend', type : 'combo',
choices : ['opengl', 'vulkan', 'software'],
value : 'opengl',
description : 'Rendering backend')
option('max_connections', type : 'integer',
min : 1, max : 1024, value : 64)
```
Use in `meson.build`:
```python
if get_option('with_tests')
subdir('tests')
endif
```
### 6. Cross-compilation
Create a cross file (`cross/arm-linux.ini`):
```ini
[binaries]
c = 'arm-linux-gnueabihf-gcc'
cpp = 'arm-linux-gnueabihf-g++'
ar = 'arm-linux-gnueabihf-ar'
strip = 'arm-linux-gnueabihf-strip'
pkgconfig = 'arm-linux-gnueabihf-pkg-config'
[properties]
sys_root = '/path/to/sysroot'
[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'cortex-a9'
endian = 'little'
```
```bash
meson setup builddir-arm --cross-file cross/arm-linux.ini
meson compile -C builddir-arm
```
### 7. CMake migration cheatsheet
| CMake | Meson equivalent |
|-------|-----------------|
| `add_executable` | `executable()` |
| `add_library` | `library()` / `static_library()` / `shared_library()` |
| `target_include_directories` | `include_directories` arg in target |
| `target_link_libraries` | `dependencies` / `link_with` |
| `find_package` | `dependency()` |
| `option()` | `option()` in `meson_options.txt` |
| `add_subdirectory` | `subdir()` |
| `install(TARGETS ...)` | `install : true` in target |
For wrap patterns and subproject configuration, see [references/meson-wrap.md](references/meson-wrap.md).
## Related skills
- Use `skills/build-systems/cmake` when CMake is required or preferred
- Use `skills/build-systems/ninja` — Meson uses Ninja as its backend
- Use `skills/compilers/cross-gcc` for cross-compiler toolchain setup
- Use `skills/compilers/gcc` or `skills/compilers/clang` for compiler flag context
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills