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

X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME ๋ฐ GTK์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Meson 1.3.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.3์˜ ์ฃผ์š” ํ˜์‹ :

  • ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ํ™•์ธ ๋ฉ”์„œ๋“œcompiler.compiles(),compiler.links()๋ฐcompiler.run()์— "werror: true" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(๊ฒฝ๊ณ  ์—†์ด ์ฝ”๋“œ๊ฐ€ ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ). ).
  • ์ „์ฒ˜๋ฆฌ๊ธฐ์—์„œ ๊ธฐํ˜ธ ์ •์˜๋ฅผ ํ™•์ธํ•˜๋Š” has_define ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Macro_name ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ C ์–ธ์–ด์˜ ๋งคํฌ๋กœ ์Šคํƒ€์ผ๋กœ ์„ค๊ณ„๋œ "#include"("include Guard")๋ฅผ ํ†ตํ•ด ์ด์ค‘ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋งคํฌ๋กœ ๋ณดํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ configure_file() ํ•จ์ˆ˜์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋™์  ๊ตฌ์„ฑ ํŒŒ์ผ ์ƒ์„ฑ์„ ๋‹จ์ˆœํ™”ํ•จ). ๋งคํฌ๋กœ ์ด๋ฆ„).
  • 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')"์™€ ๊ฐ™์€ ์ ‘๋ฏธ์‚ฌ๋Š” ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋ก ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • shared_module()์— ์ „๋‹ฌ๋œ ํ•จ์ˆ˜ ๋ชฉ๋ก์„ ์ •์˜ํ•˜๋Š” def ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด exectuable() ํ•จ์ˆ˜์— "vs_module_defs" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์ฒด ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด find_program() ํ•จ์ˆ˜์— 'default_options' ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” fs.relative_to() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')"์ž…๋‹ˆ๋‹ค.
  • install_data(), install_headers() ๋ฐ install_subdir() ํ•จ์ˆ˜์— ๋‹ค์Œ_symlinks ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ์„ค์ • ์‹œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด์„ ์•ž์— 3์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด "fill" ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ int.to_string() ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด n=4์— ๋Œ€ํ•ด message(n.to_string(fill: 004))์„ ํ˜ธ์ถœํ•˜๋ฉด "XNUMX"๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • "-fix" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ clang-tidy ์œ ํ‹ธ๋ฆฌํ‹ฐ ์‹คํ–‰์„ ์ง€์ •ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋Œ€์ƒ clang-tidy-fix๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด์…ˆ๋ธ”๋ฆฌ ๋Œ€์ƒ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE])์˜ ์ ‘๋ฏธ์‚ฌ(TARGET_SUFFIX)๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ปดํŒŒ์ผ ๋ช…๋ น์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณต์œ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ‚ค์ง€ ์บ์‹œ(ํ•˜์œ„ ํ”„๋กœ์ ํŠธ/ํŒจํ‚ค์ง€ ์บ์‹œ) ๊ฒฝ๋กœ๋ฅผ ์žฌ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ MESON_PACKAGE_CACHE_DIR์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜๊ตฌ ์บ์‹œ๋ฅผ ์ง€์šฐ๋Š” "meson setup --clearcache" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "required" ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ๋ชจ๋“  "has_*" ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "assert(cc.has_function('some_function'))" ๋Œ€์‹  "cc.has_function('some_function')์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , ํ•„์ˆ˜: true)โ€.
  • ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ Rust_abi๊ฐ€ shared_library(), static_library(), library() ๋ฐ shared_module() ํ•จ์ˆ˜์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” Rust_crate_type ๋Œ€์‹  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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