====== Appunti su Meson build ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 01/09/2026 15:18 //** // //
Alcuni appunti sparsi su Meson build .
===== Usare librerie statiche già esistenti =====
In questo esempio uso il framework web [[https://vermell.cc|Vermell]]
project('vermell_server', 'cpp')
incdir = include_directories('/opt/vermell/include')
extra_args= []
libvermell = declare_dependency(
link_args: ['/opt/vermell/libvermell.a'],
)
executable('vermell_server','main.cc',
dependencies :[libvermell],
c_args : extra_args,
include_directories : incdir,
install : false,
install_dir : '/usr/local/bin')
===== Compilare librerie statiche insieme al nostro progetto =====
Compilo libpobu dentro il mi progetto.
**meson.build**
project('libpobu_meson', 'cpp')
inc_dir = include_directories('../../source')
libpobu = static_library('libpobu', '../../source/libpobu.cpp',
include_directories: inc_dir
)
src_files = [
'test.cpp',
'../../source/libpobu.h'
]
executable('test_meson', src_files,link_with :[libpobu])
===== Creare un eseguibile statico in c++ =====
Qui si andrà a creare un eseguibile statico in c++ che include fmt (compilata staticamente) e il framework Crowcpp (che è header only).
project('crow', 'cpp')
asio = dependency('asio')
incdir = include_directories('source/Crow/include','fmt/include')
sources=['source/main.cpp' ]
fmt = declare_dependency(
link_args: ['../fmt/build/libfmt.a'],
)
executable('crow', sources,link_args: ['-static'], dependencies :[asio,fmt],include_directories : incdir)
**link_args: ['-static']** dice al linker di lincare staticamente la libreria standard.
===== Creare eseguibile statico in C++ delegando a Meson le dipendenze =====
Come prima cosa creiamo la cartella **subprojects** dentro la root del nostro progetto. Poi impartiamo i seguenti comandi per far installare a meson le dipendenze:
meson wrap install asio
meson wrap install fmt
voglio che meson mi compili le seguenti librerie scaricate dal repository Wrap. \\
**meson.build**
project('crow', 'cpp')
asio = dependency('asio')
fmt = dependency('fmt',static: true)
incdir = include_directories('source/Crow/include')
sources=['source/main.cpp' ]
executable('crow', sources,link_args: ['-static'], dependencies :[asio,fmt],include_directories : incdir)
nota che includo manualemte anche i sorgenti di crow (ignorali). \\ \\
A questo punto forziamo Meson a scaricare le librerie e usarle ignorando quelle di sistema.
meson setup build --wipe --wrap-mode=forcefallback
poi :
cd build
ninja