MesonBook
Features
multiplatform support for Linux, macOS, Windows, GCC, Clang, Visual Studio and others
supported languages include C, C++, D, Fortran, Java, Rust, Vala, C#
build definitions in a very readable and user friendly non-Turing complete DSL
cross compilation for many operating systems as well as bare metal
optimized for extremely fast full and incremental builds without sacrificing correctness
built-in multiplatform dependency provider that works together with distro packages
fun!
Вообщем лучше всего Meson описывает третий пункт, это DSL для сборок.
Hello world
Начнем с самого простого, у вас 1 файл, который является программой которую можно запустить, а не библиотекой.
source
#include<stdio.h>
int main(int argc, char **argv) {
printf("Hello there.\n");
return 0;
}print("Hello world!");print("Hello world!")import std.stdio;
void main(){
writeln("Hello World!");
}using System;
public class Prog {
static public void Main () {
Console.WriteLine("Hello World!");
}
}package com.mesonbuild;
class Simple {
public static void main(String [] args) {
System.out.println("Java is working.\n");
}
}meson.build
Даже не уверен стоит ли тут что-то пояснять, в этом вся суть Meson.
project
C этой строчки начинается любой проект, первый аргумент название проекта а затем перечисление языков которые используются в проекте (Например так как Vala компилируется в C для нее перечислены оба языка)
executable
executable это цель этого билд скрипта, в одном билдскрипте их может быть сколько угодно. Первый аргумент название, второй список файлов.
Build
Это всё, теперь мы готовы забилдить наше приложение. Сначала нам нужно инициализировать сборку, перейдя в исходный каталог и выполнив:
meson build
Мы создаем отдельный каталог сборки, чтобы содержать весь вывод компилятора. Meson отличается от некоторых других систем сборки тем, что он не допускает in-source builds. Вы всегда должны создать отдельный каталог сборки. Общепринятой нормой считается размещение build каталога в корневой директории вашего проекта.
ninja -C build
Meson использует ninja в качестве бэкенда.
Ninja - это небольшая система сборки с акцентом на скорость. Она отличается от других систем сборки в двух основных аспектах: она предназначен для того, чтобы её входные файлы создавались системой сборки более высокого уровня, и она предназначен для запуска сборок с максимальной скоростью.
По сути, Ninja предназначена для замены Make, которая медлителен при выполнении инкрементных (или no-op) сборок. Это может значительно замедлить работу разработчиков над большими проектами, такими как Google Chrome, который компилирует 40 000 входных файлов в один исполняемый файл. На самом деле Google Chrome - это основной пользователь и мотивация для создания ninja. Она также используется для сборки Android и большинством разработчиков, работающих над LLVM.
Несколько файлов
src является переменной, которая содержит массив файлов, затем мы передаем его в executable.
Аргументы могут быть именованными, чаще всего люди используют их именно так
Тесты
Первый аргумент название теста, второй executable target.
Команда ninja -C build test запустит все тесты проекта
Зависимости
Просто выводить текст в консоль слишком скучно, переключаемся на GTK.
source
meson.build
Объяснять буквально нечего, dependencies работают также как sources.

Last updated
Was this helpful?