Meson ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฆด๋ฆฌ์Šค 0.52

๊ฒŒ์‹œ ๋จ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฆด๋ฆฌ์Šค ์ค‘๊ฐ„์ž 0.52, X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME ๋ฐ GTK+์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Meson ์ฝ”๋“œ๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ณต๊ธ‰ Apache 2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Meson ๊ฐœ๋ฐœ์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ํŽธ๋ฆฌ์„ฑ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ๊ฒฐํ•ฉํ•œ ๋น ๋ฅธ ์กฐ๋ฆฝ ๊ณต์ •์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. make ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋Œ€์‹  ๊ธฐ๋ณธ ๋นŒ๋“œ์—์„œ๋Š” ํˆดํ‚ท์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹Œ์ž, ๊ทธ๋Ÿฌ๋‚˜ xcode ๋ฐ VisualStudio์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—๋Š” Meson์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ์šฉ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์ค‘ ํ”Œ๋žซํผ ์ข…์†์„ฑ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ ๊ทœ์น™์€ ๋‹จ์ˆœํ™”๋œ ๋„๋ฉ”์ธ๋ณ„ ์–ธ์–ด๋กœ ์ง€์ •๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ €์ž๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์ตœ์†Œํ•œ์˜ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).

์ง€์› GCC, Clang, Visual Studio ๋ฐ ๊ธฐํƒ€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS ๋ฐ Windows์—์„œ ํฌ๋กœ์Šค ์ปดํŒŒ์ผํ•˜๊ณ  ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. C, C++, Fortran, Java ๋ฐ Rust๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ์ดํ›„ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๊ณผ ์ง์ ‘ ๊ด€๋ จ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋งŒ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์ฆ๋ถ„ ๋นŒ๋“œ ๋ชจ๋“œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. Meson์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์™„์ „ํžˆ ๋™์ผํ•œ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ˜์‹  ์ค‘๊ฐ„์ž 0.52:

  • Emscripten์„ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์›น์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Illumos ๋ฐ Solaris ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์–ด ์ž‘๋™ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ์— gettext ํˆดํ‚ท์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ gettext ๊ธฐ๋ฐ˜ ๊ตญ์ œํ™” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฌด์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์ด์ „์—๋Š” gettext๊ฐ€ ์—†๋Š” ์‹œ์Šคํ…œ์—์„œ i18n ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค).
  • ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋œ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Environment()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ด์ œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ํ‚ค/๊ฐ’ ํ˜•์‹์œผ๋กœ ์ •์˜๋œ ์‚ฌ์ „์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋Š” ๋งˆ์น˜ set() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ Environment_object๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด์ œ "env" ์ธ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์— ์‚ฌ์ „์„ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ํƒํ•œ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ(์˜ˆ: "ninja target_name")๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด 1๋‹จ๊ณ„ ๋นŒ๋“œ ๋Œ€์ƒ์„ ์ƒ์„ฑํ•˜๋Š” "runtarget alias_target(target_name, depXNUMX, ...)" ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋นŒ๋“œ ๋Œ€์ƒ์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ชจ๋“  ์ข…์†์„ฑ์ด ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • "[properties]" ์„น์…˜์— sys_root ์„ค์ •์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ์ค‘์— PKG_CONFIG_SYSROOT_DIR ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ž๋™ ์„ค์ •์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์ •๋œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋กœ GDB๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด "--gdb testname" ์˜ต์…˜์„ ์ง€์ •ํ•  ๋•Œ GDB ๋””๋ฒ„๊ฑฐ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด "--gdb-path" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์ด Linter๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด clang-tidy ๋นŒ๋“œ ๋Œ€์ƒ์˜ ์ž๋™ ๊ฐ์ง€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—์„œ clang-tidy๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ".clang-tidy"(๋˜๋Š” "_clang-tidy") ํŒŒ์ผ์ด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉด ๋Œ€์ƒ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Clang ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ข…์†์„ฑ('๋ธ”๋ก')์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก;
  • ๋ง์ปค์™€ ์ปดํŒŒ์ผ๋Ÿฌ ๋ณด๊ธฐ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ๋‹ค์–‘ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ง์ปค ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • all_sources() ๋ฉ”์„œ๋“œ ์™ธ์— SourceSet ๊ฐ์ฒด์— all_dependent() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • run_project_tests.py์—๋Š” ์„ ํƒ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ "--only" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "python run_project_tests.py โ€”only fortran python3").
  • find_program() ํ•จ์ˆ˜์—๋Š” ์ด์ œ ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ฒ„์ „๋งŒ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ฒ„์ „์€ "-version" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค).
  • ๊ธฐํ˜ธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด shared_library()์™€ ์œ ์‚ฌํ•˜๊ฒŒ vs_module_defs ์˜ต์…˜์ด shared_module() ํ•จ์ˆ˜์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • kconfig ๋ชจ๋“ˆ์€ ์ž…๋ ฅ ํŒŒ์ผ ์ง€์ •์„ ์œ„ํ•ดconfigure_file()์„ ์ง€์›ํ•˜๋„๋ก ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "command:" ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์ž…๋ ฅ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„configure_file()์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์•„์นด์ด๋ธŒ ์ƒ์„ฑ์„ ์œ„ํ•œ "dist" ๋ช…๋ น์ด XNUMX๋‹จ๊ณ„ ๋ช…๋ น ๋ฒ”์ฃผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „ ๋ช…๋ น์€ ninja์— ๋ฌถ์—ฌ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ์ƒ์„ฑํ•  ์•„์นด์ด๋ธŒ ์œ ํ˜•์„ ์ •์˜ํ•˜๋Š” "--formats" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ:
    "์ค‘๊ฐ„ dist -formats=xztar,zip").

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€