====== 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