Даже не уверен стоит ли тут что-то пояснять, в этом вся суть Meson.
project
C этой строчки начинается любой проект, первый аргумент название проекта а затем перечисление языков которые используются в проекте (Например так как Vala компилируется в C для нее перечислены оба языка)
executable
executable это цель этого билд скрипта, в одном билдскрипте их может быть сколько угодно. Первый аргумент название, второй список файлов.
Build
Это всё, теперь мы готовы забилдить наше приложение. Сначала нам нужно инициализировать сборку, перейдя в исходный каталог и выполнив:
meson build
Мы создаем отдельный каталог сборки, чтобы содержать весь вывод компилятора. Meson отличается от некоторых других систем сборки тем, что он не допускает in-source builds. Вы всегда должны создать отдельный каталог сборки. Общепринятой нормой считается размещение build каталога в корневой директории вашего проекта.
❯ meson buildThe Meson build systemVersion: 0.54.1Source dir: /home/gavr/Dev/MesonBuild dir: /home/gavr/Dev/Meson/buildBuild type: native buildProject name: simpleProject version: undefinedC compiler for the host machine: cc (gcc 9.3.0 "cc (Arch Linux 9.3.0-1) 9.3.0")C linker for the host machine: cc ld.bfd 2.34Vala compiler for the host machine: valac (valac 0.48.5)Host machine cpu family: x86_64Host machine cpu: x86_64Found pkg-config: /usr/bin/pkg-config (1.6.3)Run-time dependency glib-2.0 found: YES 2.64.2Build targets in project: 1Found ninja-1.10.0 at /usr/bin/ninja
ninja -C build
Meson использует ninja в качестве бэкенда.
Ninja - это небольшая система сборки с акцентом на скорость. Она отличается от других систем сборки в двух основных аспектах: она предназначен для того, чтобы её входные файлы создавались системой сборки более высокого уровня, и она предназначен для запуска сборок с максимальной скоростью.
По сути, Ninja предназначена для замены Make, которая медлителен при выполнении инкрементных (или no-op) сборок. Это может значительно замедлить работу разработчиков над большими проектами, такими как Google Chrome, который компилирует 40 000 входных файлов в один исполняемый файл. На самом деле Google Chrome - это основной пользователь и мотивация для создания ninja. Она также используется для сборки Android и большинством разработчиков, работающих над LLVM.
Первый аргумент название теста, второй executable target.
Команда ninja -C build test запустит все тесты проекта
Meson не заставляет использовать какой-либо конкретный тест-фреймворк. Вы можете свободно использовать GTest(GLib), Boost Test, Check или даже пользовательские исполняемые файлы.
Зависимости
Просто выводить текст в консоль слишком скучно, переключаемся на GTK.
source
#include<gtk/gtk.h>intmain(int argc,char**argv) { GtkWidget *win;gtk_init(&argc,&argv); win =gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_tiну tle(GTK_WINDOW(win),"Hello from C!");g_signal_connect(win,"destroy",G_CALLBACK(gtk_main_quit),NULL);gtk_widget_show(win);gtk_main(); //run gtk main loop}
using Gtk;voidmain(string[] args){Gtk.init(ref args); var window =newWindow(){ title ="Hello from Vala!"}; window.destroy.connect(Gtk.main_quit); window.show_all();Gtk.main(); }
Объяснять буквально нечего, dependencies работают также как sources.
После того как вы настроили свой каталог сборки в первый раз, вам больше никогда не нужно будет запускать команду meson. Meson автоматически определит, когда вы внесли изменения в определения сборки, и позаботится обо всем, чтобы пользователям не пришлось беспокоиться.