Meson

Meson()은 코드베이스를 빌드하기 위한 빌드 자동화 소프트웨어 개발 도구이다. Meson은 가장 일반적인 작업을 구성하는 데 필요한 데이터를 최소화하기 위해 설정보다 관습 방식을 채택한다. Meson은 아파치 라이선스 2.0에 따라 자유-오픈 소스 소프트웨어이다.

Meson은 파이썬으로 작성되었으며 유닉스 계열(리눅스 및 macOS 포함), 마이크로소프트 윈도우 및 기타 운영 체제에서 실행된다. C, C++, C 샤프, CUDA, 오브젝티브-C, D, 포트란, 자바, 러스트, 발라 빌드를 지원한다. 랩(Wrap)이라는 메커니즘을 통해 종속성을 처리한다. GNU 컴파일러 모음 (gcc), 클랭, 마이크로소프트 비주얼 C++ 및 Emscripten 및 사이썬과 같은 비전통적인 컴파일러를 포함한 다른 컴파일러를 지원한다. 이 프로젝트는 닌자를 기본 백엔드 빌드 시스템으로 사용하지만, Visual Studio 또는 엑스코드 백엔드도 사용할 수 있다.

Meson의 포트란 및 사이썬 지원은 예를 들어 SciPy와 같이 다양한 과학 프로젝트가 에서 Meson으로 전환하는 데 도움이 되도록 개선되었다. Meson은  패키지를 통해 파이썬 휠을 빌드하기 위한 PEP517 백엔드로 사용할 수 있다.

 언어 
Meson의 빌드 설명 파일인 Meson 언어의 구문은 파이썬에서 차용했지만 파이썬은 아니다. 다른 언어로 다시 구현할 수 있도록 설계되었다. 예를 들어 muon은 C 구현이며, Meson++은 C++ 구현이다. 파이썬에 대한 의존성은 구현 세부 사항이다.

Meson 언어는 의도적으로 튜링 완전이 아니므로 임의의 프로그램을 표현할 수 없다. 대신, 지원되는 언어를 컴파일하는 것 이상의 임의의 빌드 단계는 사용자 정의 대상으로 표현할 수 있다.

Meson 언어는 강력한 형식 지정 언어로, 라이브러리, 실행 파일, 문자열 및 이들의 목록과 같은 내장형은 상호 교환할 수 없다. 특히, Make와 달리 목록 형식은 공백으로 문자열을 분할하지 않는다. 따라서 파일 이름 및 프로그램 인수에서 공백 및 기타 문자가 깔끔하게 처리된다.

 속도 및 정확성 
일반적인 빌드 시스템과 마찬가지로 올바른 증분 빌드는 가장 중요한 속도 기능이다(사용자가 강제로 클린 빌드를 수행해야 할 때 모든 증분 진행이 폐기되기 때문이다).

일반 Make와 달리 별도의 구성 단계는 인수, 환경 변수 및 명령 출력의 변경 사항이 후속 빌드에서 부분적으로 적용되지 않도록 하여 오래된 빌드로 이어지지 않도록 한다.

Ninja와 마찬가지로 Meson은 소스 파일의 글로빙을 지원하지 않는다. 모든 소스 파일이 빌드 정의 파일에 나열되어야 하므로, 빌드 정의 파일 타임스탬프는 소스 파일 집합이 변경되었는지 여부를 결정하는 데 충분하므로 제거된 소스 파일이 감지된다. CMake는 글로빙을 지원하지만 동일한 이유로 권장하지 않는다.

Meson은 ccache가 설치되어 있으면 자동으로 사용한다. 또한 ABI 변경이 없을 때 라이브러리에 대해 실행 파일의 다시 연결을 건너뛰기 위해 공유 라이브러리의 심볼 테이블 변경 사항을 감지한다. 프리컴파일러 헤더는 지원되지만 구성이 필요하다. 디버그 빌드는 기본적으로 최적화 없이 수행된다.

 기능 
Meson의 목표는 현대적인 개발 방식을 용이하게 하는 것이다. 따라서 Meson은 유니티 빌드를 수행하고, 코드 커버리지를 통해 빌드하는 방법 등을 프로그래머가 이를 지원하기 위해 코드를 작성할 필요 없이 수행하는 방법을 알고 있다.

 하위 프로젝트 
Meson은 pkg-config, CMake 및 프로젝트별 조회를 통해 사용자 시스템에 설치된 외부 종속성을 자동으로 찾아 사용할 수 있다.
대신, 또는 대체로, 종속성은 하위 프로젝트로 제공될 수 있다. 이는 다른 프로젝트 내에 포함되거나 다운로드 링크로 제공되며, 패치가 포함될 수도 있다. 이는 Meson이 프로젝트를 컴파일하려는 일반 사용자의 편의를 위해 의존성 지옥을 해결할 수 있게 하지만, 일반 설치된 종속성을 대신 사용할 수 있었다면 소프트웨어 블롯에 기여할 수도 있다. 따라서 리눅스 패키저가 선호하는 모드는 폴백(fallback)이다.

Meson은 Meson 및 CMake 하위 프로젝트를 지원한다. Meson 빌드 파일은 WrapDB 서비스를 참조할 수도 있다.

 교차 컴파일 
교차 컴파일은 추가 구성이 필요하며, Meson은 Meson 프로젝트 외부에서도 가능한 별도의 교차 파일 형태로 이를 지원한다.

 설치 디렉터리 설정 
x86_64 유닉스에서 라이브러리 설치 디렉터리 설정은 Meson이 자동으로 처리하지만, 오토툴(Autotools)과 같은 다른 도구에서는 그렇지 않다.

 채택자 
그놈은 프로젝트를 Meson으로 포팅하는 것을 목표로 삼았다. 2017년 후반부터 그놈 셸 자체는 오토툴을 포기한 후 Meson만을 독점적으로 요구하며, GTK+, Clutter-GTK, GLib 및 GStreamer와 같은 중앙 구성 요소도 Meson으로 빌드할 수 있다.

많은 Freedesktop.org 프로젝트가 Meson으로 전환되었다. Systemd는 버전 234에서 오토툴을 버린 이후 Meson에 의존하며, X.Org 및 메사도 Meson으로 포팅되었다.

 기능 비교 
CMake 및 Make와의 기능 비교.

 기능  Meson  CMake  Make 데이터 형식       목록 데이터 형식      사전 데이터 형식       파일 글로빙       사용자 정의 함수를 통한 확장       임의 명령의 출력 읽기 (구성 시점)       빌드 시점에 임의 명령 실행 (사용자 정의 대상의 레시피로)       오래된 빌드 방지 (입력 변경에 대한 부분 재빌드)   (버그가 없는 한)     테스트를 실행하는 대상은 빌드된 테스트에 의존한다 (예: test는 all에 의존)    , 그리고 add_dependencies(test all)은 금지된다. test 대상이 예약되어 있기 때문이다.   Ccache       Distcc       심볼 테이블 인식 재링크       프리컴파일러 헤더       설치된 종속성 찾기  pkg-config, CMake 패키지  CMake 모듈, pkg-config   종속성 자동 다운로드  하위 프로젝트  FetchContent   설치된 종속성 찾기, 다운로드 폴백 포함  pkg-config + 하위 프로젝트  CMake 모듈/pkg-config +    pkg-config 파일 생성기       자동 다운로드 가능한 종속성으로 사용 용이성      

 같이 보기 


 각주 

 외부 링크 


분류:컴파일 도구
분류:빌드 자동화
분류:파이썬으로 작성된 자유 소프트웨어
분류:아파치 라이선스 소프트웨어