Meson

license = 아파치 라이선스 2.0 **Meson**(n)url=https://www.youtube.com/watch?v=KPi0AuVpxLI&t;=2004은 코드베이스를 빌드하기 위한 빌드 자동화 소프트웨어 개발 도구이다. Meson은 가장 일반적인 작업을 구성하는 데 필요한 데이터를 최소화하기 위해 설정보다 관습 방식을 채택한다. Meson은 아파치 라이선스 2.0에 따라 자유-오픈 소스 소프트웨어이다.accessdate=13 April 2016 Meson은 파이썬으로 작성되었으며 유닉스 계열(리눅스 및 macOS 포함), 마이크로소프트 윈도우 및 기타 운영 체제에서 실행된다. C, C++, C 샤프, CUDA, 오브젝티브-C, D, 포트란, 자바, 러스트, 발라 빌드를 지원한다.title=Reference manual 랩(Wrap)이라는 메커니즘을 통해 종속성을 처리한다. GNU 컴파일러 모음 (gcc), 클랭, 마이크로소프트 비주얼 C++ 및 Emscripten 및 사이썬과 같은 비전통적인 컴파일러를 포함한 다른 컴파일러를 지원한다.title=Compiler IDs 이 프로젝트는 닌자를 기본 백엔드 빌드 시스템으로 사용하지만, Visual Studio 또는 엑스코드 백엔드도 사용할 수 있다. Meson의 포트란 및 사이썬 지원은 예를 들어 SciPy와 같이 다양한 과학 프로젝트가 setuptools에서 Meson으로 전환하는 데 도움이 되도록 개선되었다.url=https://scipy.github.io/devdocs/dev/contributor/meson.html Meson은 meson-python 패키지를 통해 파이썬 휠을 빌드하기 위한 PEP517 백엔드로 사용할 수 있다.url=https://pypi.org/project/meson-python/
# 언어
Meson의 빌드 설명 파일인 Meson 언어의 구문은 파이썬에서 차용했지만 파이썬은 아니다. 다른 언어로 다시 구현할 수 있도록 설계되었다. 예를 들어 muonaccess-date=2023-01-27은 C 구현이며, Meson++access-date=2021-05-28은 C++ 구현이다. 파이썬에 대한 의존성은 구현 세부 사항이다. Meson 언어는 의도적으로 튜링 완전이 아니므로 임의의 프로그램을 표현할 수 없다. 대신, 지원되는 언어를 컴파일하는 것 이상의 임의의 빌드 단계는 사용자 정의 대상으로 표현할 수 있다. Meson 언어는 강력한 형식 지정 언어로, 라이브러리, 실행 파일, 문자열 및 이들의 목록과 같은 내장형은 상호 교환할 수 없다. 특히, Make와 달리 목록 형식은 공백으로 문자열을 분할하지 않는다. 따라서 파일 이름 및 프로그램 인수에서 공백 및 기타 문자가 깔끔하게 처리된다.
# 속도 및 정확성
일반적인 빌드 시스템과 마찬가지로 올바른 증분 빌드는 가장 중요한 속도 기능이다(사용자가 강제로 클린 빌드를 수행해야 할 때 모든 증분 진행이 폐기되기 때문이다). 일반 Make와 달리 별도의 구성 단계는 인수, 환경 변수 및 명령 출력의 변경 사항이 후속 빌드에서 부분적으로 적용되지 않도록 하여 오래된 빌드로 이어지지 않도록 한다. Ninja와 마찬가지로 Meson은 소스 파일의 글로빙을 지원하지 않는다. 모든 소스 파일이 빌드 정의 파일에 나열되어야 하므로, 빌드 정의 파일 타임스탬프는 소스 파일 집합이 변경되었는지 여부를 결정하는 데 충분하므로 제거된 소스 파일이 감지된다. CMake는 글로빙을 지원하지만 동일한 이유로 권장하지 않는다. Meson은 ccache가 설치되어 있으면 자동으로 사용한다.url=https://mesonbuild.com/Feature-autodetection.html 또한 ABI 변경이 없을 때 라이브러리에 대해 실행 파일의 다시 연결을 건너뛰기 위해 공유 라이브러리의 심볼 테이블 변경 사항을 감지한다. 프리컴파일러 헤더는 지원되지만 구성이 필요하다.url=https://mesonbuild.com/Precompiled-headers.html 디버그 빌드는 기본적으로 최적화 없이 수행된다.
# 기능
Meson의 목표는 현대적인 개발 방식을 용이하게 하는 것이다. 따라서 Meson은 유니티 빌드를 수행하고,url=https://mesonbuild.com/Unity-builds.html 코드 커버리지를 통해 빌드하는 방법url=https://mesonbuild.com/Unit-tests.html#coverage 등을 프로그래머가 이를 지원하기 위해 코드를 작성할 필요 없이 수행하는 방법을 알고 있다.
## 하위 프로젝트
Meson은 pkg-config, CMake 및 프로젝트별 조회를 통해 사용자 시스템에 설치된 외부 종속성을 자동으로 찾아 사용할 수 있다.title=Dependencies with custom lookup functionality — Meson documentation 대신, 또는 대체로, 종속성은 하위 프로젝트로 제공될 수 있다. 이는 다른 프로젝트 내에 포함되거나 다운로드 링크로 제공되며, 패치가 포함될 수도 있다. 이는 Meson이 프로젝트를 컴파일하려는 일반 사용자의 편의를 위해 의존성 지옥을 해결할 수 있게 하지만, 일반 설치된 종속성을 대신 사용할 수 있었다면 소프트웨어 블롯에 기여할 수도 있다. 따라서 리눅스 패키저가 선호하는 모드는 폴백(fallback)이다. Meson은 Meson 및 CMake 하위 프로젝트를 지원한다. Meson 빌드 파일은 WrapDB 서비스를 참조할 수도 있다.
## 교차 컴파일
교차 컴파일은 추가 구성이 필요하며, Meson은 Meson 프로젝트 외부에서도 가능한 별도의 교차 파일 형태로 이를 지원한다.
## 설치 디렉터리 설정
x86_64 유닉스에서 라이브러리 설치 디렉터리 설정은 Meson이 자동으로 처리하지만, 오토툴(Autotools)과 같은 다른 도구에서는 그렇지 않다.
# 채택자
그놈은 프로젝트를 Meson으로 포팅하는 것을 목표로 삼았다.title=GNOME Goal: Port modules to use Meson build system 2017년 후반부터 그놈 셸 자체는 오토툴을 포기한 후 Meson만을 독점적으로 요구하며,title=GNOME 3.26 Beta Debuts: More Meson Porting, Wayland Action GTK+, Clutter-GTK, GLib 및 GStreamer와 같은 중앙 구성 요소도 Meson으로 빌드할 수 있다. 많은 Freedesktop.org 프로젝트가 Meson으로 전환되었다. Systemd는 버전 234에서 오토툴을 버린 이후 Meson에 의존하며,website=깃허브 X.Orgtitle=Meson Support Has Landed In The X.Org Server 및 메사title=Mesa Developers Move Closer To Dropping Autotools Build System In Favor Of Meson도 Meson으로 포팅되었다.
# 기능 비교
CMake 및 Make와의 기능 비교. {| class="wikitable" |- ! 기능 !! Meson !! CMake !! Make |- | 데이터 형식 || Yes || 아니요 || 아니요 |- | 목록 데이터 형식 || Yes || 세미콜론으로 구분된 문자열|| 공백으로 구분된 문자열 |- | 사전 데이터 형식 || 0.47.0부터 || 아니요 || 아니요 |- | 파일 글로빙 || 아니요 || Yes || 일부 변형의 비표준 확장 |- | 사용자 정의 함수를 통한 확장 || 아니요 || Yes || 아니요 |- | 임의 명령의 출력 읽기 (구성 시점) || run_command || Yes || Yes |- | 빌드 시점에 임의 명령 실행 (사용자 정의 대상의 레시피로) || Yes || Yes || Yes |- | 오래된 빌드 방지 (입력 변경에 대한 부분 재빌드) || Yes (버그가 없는 한) || 소스 파일 글로빙이 아닌 경우 || 재귀적 Make (관용적인 패턴)는 이 점에서 문제가 있다 |- | 테스트를 실행하는 대상은 빌드된 테스트에 의존한다 (예: `test`는 `all`에 의존) || Yes || 아니요, 그리고 `add_dependencies(test all)`은 금지된다. `test` 대상이 예약되어 있기 때문이다. || 추가하기 매우 쉽다 |- | Ccache || 자동 || 추가하기 매우 쉽다 || 추가하기 매우 쉽다 |- | Distcc || 추가하기 매우 쉽다 || 추가하기 매우 쉽다 || 추가하기 매우 쉽다 |- | 심볼 테이블 인식 재링크 || Yes || 직접 해야 한다 || 직접 해야 한다 |- | 프리컴파일러 헤더 || Optional || CMake ≥ 3.16 || 직접 해야 한다 |- | 설치된 종속성 찾기 || pkg-config, CMake 패키지 || CMake 모듈, pkg-config || Sdash |- | 종속성 자동 다운로드 || 하위 프로젝트 || FetchContenttitle = FetchContent — CMake 3.15.7 Documentation || Sdash |- | 설치된 종속성 찾기, 다운로드 폴백 포함 || pkg-config + 하위 프로젝트 || CMake 모듈/pkg-config + FetchContent || Sdash |- | pkg-config 파일 생성기 || Yes || 아니요 || Sdash |- | 자동 다운로드 가능한 종속성으로 사용 용이성 || Meson 하위 프로젝트로 사용 가능 || 아니요 || Sdash |}