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