agentleFS
mohitmishra786mohitmishra786/low-level-dev-skills/skills/build-systems/meson/SKILL.md

meson

Skill290 starsChanged 7 months agoMITView on GitHub

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.

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 0 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Create a cross file (cross/arm-linux.ini):

    line 184
  2. Very specific:

    Use skills/build-systems/cmake when CMake is required or preferred

    line 226
  3. Very specific:

    Use skills/build-systems/ninja — Meson uses Ninja as its backend

    line 227
  4. Very specific:

    Use skills/compilers/cross-gcc for cross-compiler toolchain setup

    line 228
  5. Very specific:

    Use skills/compilers/gcc or skills/compilers/clang for compiler flag context

    line 229

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

# 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
--buildtypeEquivalent flags
debug (default)-O0 -g
debugoptimized-O2 -g
release-O3 -DNDEBUG
minsize-Os -DNDEBUG
plainNo flags added

2. Build and test

# 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

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

# 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:

# 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:

[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):

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:

if get_option('with_tests')
  subdir('tests')
endif

6. Cross-compilation

Create a cross file (cross/arm-linux.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'
meson setup builddir-arm --cross-file cross/arm-linux.ini
meson compile -C builddir-arm

7. CMake migration cheatsheet

CMakeMeson equivalent
add_executableexecutable()
add_librarylibrary() / static_library() / shared_library()
target_include_directoriesinclude_directories arg in target
target_link_librariesdependencies / link_with
find_packagedependency()
option()option() in meson_options.txt
add_subdirectorysubdir()
install(TARGETS ...)install : true in target

For wrap patterns and subproject configuration, see 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

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.