Versione del sistema di compilazione Meson 1.3

È stato rilasciato il sistema di build Meson 1.3.0, che viene utilizzato per creare progetti come X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. Il codice di Meson è scritto in Python ed è concesso in licenza con la licenza Apache 2.0.

L'obiettivo principale dello sviluppo di Meson è fornire un'elevata velocità del processo di assemblaggio unita a praticità e facilità d'uso. Al posto dell'utilità make, durante la creazione viene utilizzato per impostazione predefinita il toolkit Ninja, ma è possibile utilizzare anche altri backend come xcode e VisualStudio. Il sistema dispone di un gestore di dipendenze multipiattaforma integrato che consente di utilizzare Meson per creare pacchetti per le distribuzioni. Le regole di assemblaggio sono specificate in un linguaggio semplificato specifico del dominio, sono altamente leggibili e comprensibili per l'utente (come previsto dagli autori, lo sviluppatore dovrebbe dedicare un minimo di tempo alla scrittura delle regole).

Supporta la compilazione incrociata e la creazione su Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS e Windows utilizzando GCC, Clang, Visual Studio e altri compilatori. È possibile realizzare progetti in vari linguaggi di programmazione, tra cui C, C++, Fortran, Java e Rust. È supportata la modalità di compilazione incrementale, in cui vengono ricostruiti solo i componenti direttamente correlati alle modifiche apportate dall'ultima compilazione. Meson può essere utilizzato per generare build ripetibili, in cui l'esecuzione della build in ambienti diversi determina la generazione di file eseguibili completamente identici.

Principali innovazioni di Meson 1.3:

  • Aggiunta l'opzione “werror: true” ai metodi di controllo del compilatore compiler.compiles(), compiler.links() e compiler.run(), che tratta gli avvisi del compilatore come errori (può essere utilizzato per verificare che il codice sia creato senza avvisi ).
  • Aggiunto il metodo has_define per controllare la definizione dei simboli da parte del preprocessore.
  • Il parametro macro_name è stato aggiunto alla funzione configure_file(), aggiungendo la protezione macro per le doppie connessioni tramite “#include” (“include guards”), progettato nello stile delle macro in linguaggio C (semplificando la creazione di file di configurazione con dinamica nomi delle macro).
  • Un nuovo formato di output è stato aggiunto a configure_file() - JSON ("output_format: json").
  • Aggiunta la possibilità di utilizzare elenchi di valori ai parametri c_std e cpp_std (ad esempio, “default_options: 'c_std=gnu11,c11′').
  • Nei moduli che utilizzano CustomTarget per elaborare i file, è stata aggiunta la possibilità di personalizzare i messaggi emessi dall'utility ninja.
  • Il build_target "jar" è stato deprecato ed è invece consigliata la chiamata "jar()".
  • Il parametro 'env' è stato aggiunto al metodo generator.process() per impostare la variabile di ambiente attraverso la quale il generatore elaborerà l'input.
  • Quando si specificano i nomi di destinazione della build associati agli eseguibili, i suffissi come "executable('foo', 'main.c', name_suffix: 'bar')" possono generare eseguibili aggiuntivi nella stessa directory.
  • Aggiunto il parametro "vs_module_defs" alla funzione exectuable() per utilizzare un file def che definisce l'elenco delle funzioni passate a shared_module().
  • Aggiunto il parametro 'default_options' alla funzione find_program() per impostare le opzioni predefinite per il sottoprogetto fallback.
  • Aggiunto il metodo fs.relative_to(), che restituisce il percorso relativo per il primo argomento, relativo al secondo, se il primo percorso esiste. Ad esempio, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • Il parametro seguente_symlinks è stato aggiunto alle funzioni install_data(), install_headers() e install_subdir(); quando impostato, vengono seguiti i collegamenti simbolici.
  • Un parametro "fill" è stato aggiunto al metodo int.to_string() per riempire in modo incrementale la stringa con zeri iniziali. Ad esempio, la chiamata a message(n.to_string(fill: 3)) per n=4 produrrà la stringa "004".
  • Aggiunto un nuovo target, clang-tidy-fix, che specifica l'esecuzione dell'utilità clang-tidy con il flag "-fix".
  • La possibilità di specificare il suffisso (TARGET_SUFFIX) della destinazione dell'assembly ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) è stata aggiunta al comando di compilazione.
  • Aggiunta la variabile d'ambiente MESON_PACKAGE_CACHE_DIR per sovrascrivere il percorso della cache dei pacchetti (sottoprogetti/packagecache), ad esempio, consentendo di utilizzare una cache condivisa in diversi progetti.
  • Aggiunto il comando "meson setup --clearcache" per cancellare la cache persistente.
  • Il supporto per la parola chiave "required" è stato aggiunto a tutti i metodi di controllo del compilatore "has_*", ad esempio, invece di "assert(cc.has_function('some_function'))" è ora possibile specificare "cc.has_function('some_function' , richiesto: vero)”.
  • Una nuova parola chiave, ruggine_abi, è stata aggiunta alle funzioni shared_library(), static_library(), libreria() e shared_module(), che dovrebbe essere utilizzata al posto della deprecata ruggine_crate_type.

Fonte: opennet.ru

Aggiungi un commento