介子構建系統版本 1.3

Meson 1.3.0 構建系統版本已經發布,用於構建 X.Org Server、Mesa、Lighttpd、systemd、GStreamer、Wayland、GNOME 和 GTK 等項目。 Meson 代碼是用 Python 編寫的,並在 Apache 2.0 許可下獲得許可。

Meson 的主要開發目標是提供一種結合便利性和易用性的高速組裝過程。 默認情況下,構建使用 Ninja 工具包而不是 make,但也可以使用其他後端,例如 xcode 和 VisualStudio。 該系統有一個內置的多平台依賴處理程序,允許您使用 Meson 為分發構建包。 彙編規則以簡化的領域特定語言設置,它們對用戶來說具有很好的可讀性和理解性(根據作者的想法,開發人員應該花最少的時間來編寫規則)。

支持使用 GCC、Clang、Visual Studio 和其他編譯器在 Linux、Illumos/Solaris、FreeBSD、NetBSD、DragonFly BSD、Haiku、macOS 和 Windows 上交叉編譯和構建。 可以使用各種編程語言構建項目,包括 C、C++、Fortran、Java 和 Rust。 支持增量構建模式,其中僅重建與自上次構建以來所做更改直接相關的組件。 Meson 可用於生成可重複構建,在不同環境中運行構建會產生完全相同的可執行文件。

Meson 1.3的主要創新點:

  • 在編譯器檢查方法compiler.compiles()、compiler.links()和compiler.run()中添加了選項“werror: true”,它將編譯器警告視為錯誤(可用於檢查程式碼是否在沒有警告的情況下建置) )。
  • 新增了 has_define 方法來透過預處理器檢查符號定義。
  • configure_file()函數中增加了macro_name參數,透過「#include」(「includeguards」)為雙重連接新增巨集保護,並採用C語言中巨集的風格設計(簡化了動態設定檔的建立)巨集名稱)。
  • configure_file() 中新增了新的輸出格式 - JSON(“output_format: json”)。
  • 在 c_std 和 cpp_std 參數中加入了使用值清單的功能(例如,「default_options: 'c_std=gnu11,c11′'」)。
  • 在使用 CustomTarget 處理檔案的模組中,新增了自訂 ninja 實用程式輸出的訊息的功能。
  • build_target“jar”已被棄用,建議使用“jar()”呼叫。
  • Generator.process() 方法中加入了 'env' 參數來設定生成器處理輸入的環境變數。
  • 當指定與執行檔關聯的建置目標名稱時,允許使用「executable('foo', 'main.c', name_suffix: 'bar')」等後綴在同一目錄中產生其他執行檔。
  • 在 exectuable() 函數中新增了「vs_module_defs」參數,以使用定義傳遞給 shared_module() 的函數清單的 def 檔案。
  • 在 find_program() 函數中新增了「default_options」參數,以設定後備子項目的預設選項。
  • 新增了 fs.relative_to() 方法,如果第一個路徑存在,則傳回第一個參數相對於第二個參數的相對路徑。 例如,「fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')」。
  • follow_symlinks 參數已新增至 install_data()、install_headers() 和 install_subdir() 函數中;設定後,將遵循符號連結。
  • int.to_string() 方法中加入了「fill」參數,以增量方式以前導零填滿字串。 例如,對於 n=3 呼叫 message(n.to_string(fill: 4)) 將產生字串「004」。
  • 新增了一個新目標 clang-tidy-fix,它指定使用「-fix」標誌來執行 clang-tidy 實用程式。
  • 編譯指令中加入了指定組件目標 ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) 字尾 (TARGET_SUFFIX) 的功能。
  • 新增了環境變數 MESON_PACKAGE_CACHE_DIR 以覆蓋套件快取 (subprojects/packagecache) 的路徑,例如,允許您在多個專案中使用共用快取。
  • 新增了「meson setup --clearcache」指令來清除持久性快取。
  • 對“required”關鍵字的支援已添加到所有“has_*”編譯器檢查方法中,例如,您現在可以指定“cc.has_function('some_function'”,而不是“assert(cc.has_function('some_function' ))」 ,必需:true)」。
  • 一個新的關鍵字 rust_abi 已加入到shared_library()、static_library()、library() 和shared_module() 函式中,應該使用它來取代已棄用的rust_crate_type。

來源: opennet.ru

添加評論