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

๊ฒŒ์‹œ ๋จ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฆด๋ฆฌ์Šค ์ค‘๊ฐ„์ž 0.51, 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, macOS ๋ฐ Windows์—์„œ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ๋ฐ ๋นŒ๋“œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. C, C++, Fortran, Java ๋ฐ Rust๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ์ดํ›„ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๊ณผ ์ง์ ‘ ๊ด€๋ จ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋งŒ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์ฆ๋ถ„ ๋นŒ๋“œ ๋ชจ๋“œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. Meson์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์™„์ „ํžˆ ๋™์ผํ•œ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

  • CMake ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ํˆฌ๋ช…ํ•œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Meson์€ ์ด์ œ ํ‘œ์ค€ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์™€ ์œ ์‚ฌํ•˜๊ฒŒ CMake ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ(์˜ˆ: ๋‹จ์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(CMake ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Œ).
  • ์‚ฌ์šฉ๋œ ๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์˜ ์กฐ๋ฆฝ ๋ฐ ์‹คํ–‰(์˜จ์ „์„ฑ ๊ฒ€์‚ฌ)์„ ํ†ตํ•ด ์˜ˆ๋น„ ํ…Œ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ํ”Œ๋ž˜๊ทธ ํ…Œ์ŠคํŠธ์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด์ œ๋ถ€ํ„ฐ ํ˜„์žฌ ํ”Œ๋žซํผ์— ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋„ ๊ฒ€์‚ฌ๋ฉ๋‹ˆ๋‹ค). .
  • ์˜ต์…˜ ์•ž์— ํ”Œ๋žซํผ ์ ‘๋‘์‚ฌ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ์ค‘์— ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋ช…๋ น์ค„ ์˜ต์…˜์ด ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ์—๋งŒ ์ ์šฉ๋˜์—ˆ์œผ๋ฉฐ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์—๋Š” ์ง€์ •ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ ๋˜๋Š” ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ช…๋ น์ค„ ์˜ต์…˜์ด ์ ์šฉ๋˜๋ฏ€๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ์™€ ํฌ๋กœ์Šค ๋นŒ๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ต์ฐจ ํŒŒ์ผ์„ ๋‚˜์—ดํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น์ค„์—์„œ "--cross-file" ํ”Œ๋ž˜๊ทธ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Windows ํ”Œ๋žซํผ(ICL.EXE ๋ฐ ifort)์šฉ ICL ์ปดํŒŒ์ผ๋Ÿฌ(์ธํ…” C/C++ ์ปดํŒŒ์ผ๋Ÿฌ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Xtensa CPU(xt-xcc, xt-xc++, xt-nm)์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ํˆดํ‚ท ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "get_variable" ๋ฉ”์†Œ๋“œ๊ฐ€ "์ข…์†์„ฑ" ๊ฐ์ฒด์— ์ถ”๊ฐ€๋˜์–ด ํ˜„์žฌ ์ข…์†์„ฑ์˜ ์œ ํ˜•์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: dep.get_variable(pkg-config : 'var- ์ด๋ฆ„', cmake : 'COP_VAR_NAME));
  • ๋ง์ปค๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋Œ€์ƒ ์–ด์…ˆ๋ธ”๋ฆฌ ์˜ต์…˜ ์ธ์ˆ˜ "link_์–ธ์–ด"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ๋ณธ Fortran ํ”„๋กœ๊ทธ๋žจ์€ C/C++ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” Fortran ๋ง์ปค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ์ž๋™์œผ๋กœ C/C++๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • CPPFLAGS ์ „์ฒ˜๋ฆฌ๊ธฐ ํ”Œ๋ž˜๊ทธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Meson์€ ์ด์ „์— CPPFLAGS์™€ ์–ธ์–ด๋ณ„ ์ปดํŒŒ์ผ ํ”Œ๋ž˜๊ทธ(CFLAGS, CXXFLAGS)๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌ๋˜๋ฉฐ CPPFLAGS์— ๋‚˜์—ด๋œ ํ”Œ๋ž˜๊ทธ๋Š” ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ์–ธ์–ด์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ ํ”Œ๋ž˜๊ทธ์˜ ๋˜ ๋‹ค๋ฅธ ์†Œ์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ custom_target ๋ฐ custom_target[i]์˜ ์ถœ๋ ฅ์„ link_with ๋ฐ link_whole ์ž‘์—…์˜ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์ƒ์„ฑ๊ธฐ๋Š” "์ข…์†" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ์ข…์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ƒ์„ฑ๊ธฐ(program_runner, ์ถœ๋ ฅ: ['@).[์ด๋ฉ”์ผ ๋ณดํ˜ธ]'], ๋”ฐ๋ผ ๋‹ค๋ฆ„: exe));
  • ์ •์ ์œผ๋กœ ๋งํฌ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ฒ€์ƒ‰์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋ก find_library์— ์ •์  ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • python.find_installation์˜ ๊ฒฝ์šฐ ํŠน์ • Python ๋ฒ„์ „์— ๋Œ€ํ•ด ํŠน์ • Python ๋ชจ๋“ˆ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • kconfig ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ ๋ชจ๋“ˆ ๋ถˆ์•ˆ์ •-kconfig๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ์ˆ˜์™€ ํ•จ๊ป˜ ๋ช…๋ น์„ ๊ฐ€์ ธ์™€ ๋ชจ๋“  ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ช…๋ น "subprojects foreach"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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