سیستم ساخت مزون نسخه 1.3

انتشار سیستم ساخت Meson 1.3.0 منتشر شده است که برای ساخت پروژه هایی مانند X.Org Server، Mesa، Lighttpd، systemd، GStreamer، Wayland، GNOME و GTK استفاده می شود. کد مزون به زبان پایتون نوشته شده و تحت مجوز آپاچی 2.0 است.

هدف اصلی توسعه Meson ارائه یک فرآیند مونتاژ با سرعت بالا همراه با راحتی و سهولت استفاده است. به‌جای ساخت، این بیلد به‌طور پیش‌فرض از جعبه ابزار Ninja استفاده می‌کند، اما از دیگر بک‌اندها مانند xcode و VisualStudio نیز می‌توان استفاده کرد. این سیستم دارای یک کنترلر وابستگی چند پلتفرمی داخلی است که به شما امکان می دهد از Meson برای ساخت بسته هایی برای توزیع ها استفاده کنید. قوانین اسمبلی به زبان ساده شده مختص دامنه تنظیم شده است، آنها به خوبی خوانا و برای کاربر قابل درک هستند (طبق ایده نویسندگان، توسعه دهنده باید حداقل زمان خود را برای نوشتن قوانین صرف کند).

کامپایل متقابل و ساخت بر روی Linux، Illumos/Solaris، FreeBSD، NetBSD، DragonFly BSD، Haiku، macOS و Windows با استفاده از GCC، Clang، Visual Studio و سایر کامپایلرها پشتیبانی می شود. امکان ساخت پروژه به زبان های برنامه نویسی مختلف از جمله C، C++، Fortran، Java و Rust وجود دارد. یک حالت ساخت افزایشی پشتیبانی می‌شود، که در آن فقط اجزایی که مستقیماً با تغییرات ایجاد شده از آخرین ساخت مرتبط هستند، بازسازی می‌شوند. مزون را می توان برای تولید بیلدهای تکرارپذیر استفاده کرد، که در آن اجرای بیلد در محیط های مختلف منجر به اجرای کاملاً یکسان می شود.

نوآوری های اصلی Meson 1.3:

  • گزینه "error: true" را به روش های بررسی کامپایلر compiler.compiles()، compiler.links() و compiler.run() اضافه کرد که هشدارهای کامپایلر را به عنوان خطا در نظر می گیرد (برای بررسی اینکه کد بدون اخطار ساخته شده است استفاده می شود. ).
  • روش has_define برای بررسی تعریف نماد توسط پیش پردازنده اضافه شد.
  • پارامتر macro_name به تابع configure_file() اضافه شده است و از طریق "#include" ("include guards") محافظت ماکرو برای اتصالات دوگانه اضافه شده است، که به سبک ماکروها در زبان C طراحی شده است (ساده سازی ایجاد فایل های پیکربندی با پویا نام های کلان).
  • یک فرمت خروجی جدید به configure_file() - JSON ("output_format: json") اضافه شده است.
  • قابلیت استفاده از لیست مقادیر را به پارامترهای c_std و cpp_std اضافه کرد (به عنوان مثال، "default_options: 'c_std=gnu11,c11'".
  • در ماژول هایی که از CustomTarget برای پردازش فایل ها استفاده می کنند، قابلیت سفارشی سازی پیام های خروجی توسط ابزار ninja اضافه شده است.
  • build_target "jar" منسوخ شده است و فراخوانی "jar()" به جای آن توصیه می شود.
  • پارامتر 'env' به متد generator.process() اضافه شده است تا متغیر محیطی را تنظیم کند که از طریق آن ژنراتور ورودی را پردازش می کند.
  • هنگام تعیین نام‌های هدف ساخت مرتبط با فایل‌های اجرایی، پسوندهایی مانند "executable('foo', 'main.c', name_suffix: 'bar')" مجاز به تولید فایل‌های اجرایی اضافی در همان فهرست هستند.
  • پارامتر "vs_module_defs" را به تابع exectuable() اضافه کرد تا از یک فایل def استفاده کند که لیست توابع ارسال شده به shared_module() را تعریف کند.
  • پارامتر «default_options» به تابع find_program() اضافه شد تا گزینه‌های پیش‌فرض را برای زیرپروژه بازگشتی تنظیم کند.
  • متد fs.relative_to() اضافه شد که در صورت وجود مسیر اول، مسیر نسبی آرگومان اول را نسبت به دومی برمی گرداند. به عنوان مثال، "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • پارامتر following_symlinks به توابع install_data()، install_headers() و install_subdir() اضافه شده است؛ در صورت تنظیم، پیوندهای نمادین دنبال می شوند.
  • یک پارامتر "fill" به متد int.to_string() اضافه شده است تا رشته را به صورت تدریجی با صفرهای ابتدایی پر کند. به عنوان مثال، فراخوانی message(n.to_string(fill: 3)) برای n=4 رشته "004" را تولید می کند.
  • یک هدف جدید اضافه شد، clang-tidy-fix، که اجرای ابزار clang-tidy را با پرچم "-fix" مشخص می کند.
  • قابلیت تعیین پسوند (TARGET_SUFFIX) هدف اسمبلی ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) به فرمان کامپایل اضافه شده است.
  • برای مثال، متغیر محیطی MESON_PACKAGE_CACHE_DIR را برای نادیده گرفتن مسیر کش بسته (subprojects/packagecache) اضافه کرده است، به عنوان مثال، به شما امکان می دهد از یک کش مشترک در چندین پروژه استفاده کنید.
  • دستور "meson setup --clearcache" برای پاک کردن حافظه پنهان دائمی اضافه شد.
  • پشتیبانی از کلمه کلیدی "ضروری" به تمام روش های بررسی کامپایلر "has_*" اضافه شده است، به عنوان مثال، به جای "assert(cc.has_function('some_function'))" اکنون می توانید "cc.has_function('some_function' را مشخص کنید. , لازم: درست)”.
  • یک کلمه کلیدی جدید، rust_abi، به توابع shared_library()، static_library()، library() و shared_module() اضافه شده است که باید به جای rust_crate_type منسوخ شده استفاده شود.

منبع: opennet.ru

اضافه کردن نظر