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

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

Meson์˜ ์ฃผ์š” ๊ฐœ๋ฐœ ๋ชฉํ‘œ๋Š” ํŽธ๋ฆฌํ•จ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์ด ๊ฒฐํ•ฉ๋œ ๊ณ ์† ์กฐ๋ฆฝ ๊ณต์ •์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. make ๋Œ€์‹  ๋นŒ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Ninja ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ 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.0์˜ ์ฃผ์š” ํ˜์‹ :

  • Rust ์–ธ์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ์ด ์•ˆ์ •์ ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ Mesa ํ”„๋กœ์ ํŠธ์—์„œ Rust๋กœ ์ž‘์„ฑ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์—์„œ ์ง€์›๋˜๋Š” ์ ‘๋‘์‚ฌ ์˜ต์…˜์€ ๋ฌธ์ž์—ด ์ด์™ธ์˜ ๋ฐฐ์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์ œ ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: cc.check_header('GL/wglew.h', prefix : ['#include ', '#ํฌํ•จํ•˜๋‹ค '])
  • ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ๋กœ์šด "--workdir" ์ธ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ๋Œ€์‹  ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด meson devenv -C builddir --workdir ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด์—์„œ ํ•˜์œ„ ๋ฌธ์ž์—ด์˜ ๋ฐœ์ƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž "in" ๋ฐ "not in"์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— ๋ฐฐ์—ด์ด๋‚˜ ์‚ฌ์ „์—์„œ ์š”์†Œ์˜ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: fs = import('fs') if 'something' in fs.read('somefile') # True endif
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ์˜ ์ถœ๋ ฅ์„ ์ผœ๋Š” "warning-level=everything" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(clang ๋ฐ MSVC์—์„œ๋Š” -Weverything ๋ฐ /Wall์„ ์‚ฌ์šฉํ•˜๊ณ  GCC์—์„œ๋Š” ๋ณ„๋„์˜ ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋˜๋ฉฐ ๋Œ€๋žต clang์˜ -Weverything ๋ชจ๋“œ์— ํ•ด๋‹นํ•จ).
  • Rust.bindgen ๋ฉ”์†Œ๋“œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ข…์†์„ฑ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด "์ข…์†์„ฑ" ์ธ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • java.generate_native_headers ํ•จ์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ Meson์˜ ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ๋ช…๋ช… ์Šคํƒ€์ผ๊ณผ ์ผ์น˜ํ•˜๋„๋ก java.native_headers๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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