메손(소프트웨어)

Meson (software)
메손
Logo since 2019
2019년 이후 로고
Meson 0.58.0 screenshot.png
meson 구성 dav1d
개발자주시 팍카넨
초기 릴리즈2013년 3월 2일; 9년(2013-03-02)
안정적 해제
0.62.0[1] / 2022년 3월 21일; 24일 전(2022년 3월 21일)
리포지토리
기록 위치파이톤
운영 체제크로스 플랫폼
유형소프트웨어 개발 도구
면허증아파치 라이선스 2.0
웹사이트mesonbuild.com Edit this on Wikidata

Meson(/mesm³.sɒn/)[2]은 소프트웨어의 빌딩(컴파일링) 자동화를 위한 소프트웨어 툴이다.Meson의 전반적인 목표는 프로그래머 생산성을 향상시키는 것이다.[3]Meson은 Apache License 2.0에 따라 Python으로 작성된 무료 오픈소스 소프트웨어다.[4]

상호운용성

Python으로 작성된 Meson은 MacOS를 포함한 Unix와 유사한 운영 체제와 Microsoft Windows 및 기타 운영 체제에서 실행된다.

메손은 C, C++, CUDA, D, 목표-C, 포트란, 자바, C#, 러스트, 발라어를 지원하며,[5] 래핑이라는 종속성을 취급하는 메커니즘을 가지고 있다.

메손은 Emscripten, Cython과 같은 비전통 컴파일러를 포함한 GNU 컴파일러 컬렉션, 클랑, 마이크로소프트 Visual C++ 및 기타 컴파일러를 지원한다.[6]이 프로젝트는 기본 백엔드 빌드 시스템으로 닌자를 사용하지만 마이크로소프트 비주얼 스튜디오Xcode 백엔드를 사용할 수도 있다.

언어

Meson의 빌드 설명 파일(Meson 언어)의 구문은 Python에서 빌렸으나 Python은 아니다.그것은 다른 어떤 언어로도 재조명될 수 있도록 설계되었다.[7] 예를 들어, Meson++[8]는 C++ 구현이다. Python에 대한 의존성은 구현 세부사항이다.

메손 언어는 의도적으로 튜링이 완전하지 않기 때문에 임의의 프로그램을 표현할 수 없다.[7]대신 지원되는 언어를 컴파일하는 것을 넘어 임의의 빌드 단계를 사용자 지정 대상으로 나타낼 수 있다.

메손 언어는 라이브러리, 실행 파일, 문자열 및 목록과 같은 기본 제공 형식은 상호 교환이 불가능하도록 강하게 입력된다.[9]특히 목록 유형은 Make와 달리 공백에서 문자열을 분할하지 않는다.[7]따라서 파일 이름 및 프로그램 인수의 공백 및 기타 문자를 깨끗하게 처리한다.

메손 CMake 만들다
데이터 유형 아니요. 아니요.
데이터 유형 나열 세미콜론으로 구분된 문자열 공백으로 구분된 문자열
사전 데이터 유형 0.47.0 이후 아니요. 아니요.
파일 전역 아니요.
사용자 지정 기능을 통해 확장 가능 아니요.
임의 명령의 출력을 읽을 수 있음(구성 시) run_command
빌드 시 사용자 지정 대상의 레시피로 임의 명령을 실행할 수 있음

속도와 정확성

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

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

닌자와 마찬가지로 메손도 소스 파일의 글로브를 지원하지 않는다.[7]모든 소스 파일을 빌드 정의 파일에 나열하도록 요구함으로써 빌드 정의 파일 타임스탬프는 소스 파일 세트가 변경되었는지 확인하기에 충분하므로 제거된 소스 파일이 탐지되도록 한다.CMake는 글로브를 지지하지만, 같은 이유로 글로브를 반대할 것을 권고한다.[10]

Meson은 설치된 경우 자동으로 ccache를 사용한다.또한 ABI 변경이 없을 때 라이브러리에 대해 실행 파일을 다시 연결하지 않도록 공유 라이브러리기호 테이블 변경도 감지한다.사전 컴파일된 헤더는 지원되지만 구성이 필요하다.디버그 빌드는 기본적으로 최적화가 없다.

속력 특집 메손 CMake 만들다
오래된 빌드 금지(입력 변경에 대한 부분 재구성) 예(버그가 없는 경우) 원본 파일을 전역하지 않는 경우 이런 점에서[11] 재귀적 Make (관용적 패턴)는 깨진다.
테스트를 실행하는 대상은 구축 중인 테스트에 따라 달라진다(예:test에 달려 있다all) 아니, 그리고add_dependencies(test all)금지되어 있다, 왜냐하면test타겟은 유보되어 있다.[12] 추가할 사소한 항목
카체 자동 추가할 사소한 항목 추가할 사소한 항목
디스트치 추가할 사소한 항목 추가할 사소한 항목 추가할 사소한 항목
기호 테이블 인식 다시 연결 직접 하시오. 직접 하시오.
미리 컴파일된 헤더 선택적 CMake ≥ 3.16[13][2] 직접 하시오.

특징들

Meson의 명시적인 목표는 현대적인 개발 관행을 촉진하는 것이다.이와 같이, Meson은 프로그래머가 이에 대한 지원을 작성할 필요 없이 통합 구축, 테스트 커버리지구축, 링크 시간 최적화 등을 하는 방법을 알고 있다.

메손 CMake 오토툴스
생성 aconfigure각본을 뜨다 아니요. 아니요. make dist
x86_64 Unix에 올바른 라이브러리 설치 디렉터리 설정 자동 표준화되지 않음 ./configure --libdir=/usr/lib64

서브프로젝트

메손은 pkg-config, CMake, 프로젝트별 룩업을 통해 외부 종속성을 자동으로 찾아 사용할 수 있지만,[14] 이는 설치된 종속성만 찾아낼 뿐 메손은 아무것도 할 수 없다.또는 대체적으로 또는 대체적으로 종속성이 하위 프로젝트로서 제공될 수 있다. 즉, 다른 프로젝트 내에 포함된 메손 프로젝트 또는 다운로드 링크로서, 패치를 포함할 수 있다.[15]이것은 Meson이 프로젝트를 컴파일하기를 원하는 일상적인 사용자들의 편의를 위해 의존성 지옥을 해결하도록 하지만 만약 일반적인 설치된 의존성을 대신 사용할 수 있었다면 소프트웨어 비대화의 원인이 될 수 있다.그러므로 리눅스 포장업자들이 선호하는 모드는 낙후된 것이다.[16]

Meson은 Meson과 CMake 하위 프로젝트를 지원한다.Meson 빌드 파일은 또한 RabdDB 서비스를 참조할 수 있다.[15]

여러 빌드 시스템의 종속성 해결 사용 사례 비교
케이스를 사용하다 메손 CMake 화물
설치된 종속성을 찾는 중 pkg-config, CMake 패키지 CMake 모듈, pkg-config ?
종속성을 자동으로 다운로드하는 중 서브프로젝트 FetchContent[17] 화물상속성
다운로드 폴백을 사용하여 설치된 종속성을 찾는 중 pkg-config + 하위 프로젝트 CMake 모듈/pkg-config +FetchContent ?
pkg-config 파일 생성기 아니요. 아니요.
자동 다운로드 가능한 종속성으로 쉽게 사용 Meson 하위 프로젝트로 사용할 수 있음 아니요. 상자에 등록하는 것.이오

교차 컴파일

교차 컴파일에는 추가 구성이 필요하며, 메손은 별도의 크로스 파일 형태로 지원하며, 이는 메손 프로젝트의 외부에 있을 수 있다.[18]

어답터

GNOME은 메손에 프로젝트를 전달하는 것을 목표로 삼았다.[19]2017년 말 현재 GNOME Shell 자체는 오토툴스를 버리고 메손을 독점적으로 요구하며,[20] GTK+, 클루터-GTK, GLib, GStreamer 등 중심부품을 메손과 함께 시공할 수 있다.[19]

Systemd는 버전 234에서 Autotools를 떨어뜨린 이후 Meson에 의존한다.[21]

또한 X.Org[22] Mesa[23] 메손에 포팅되었다.

메슨 홈페이지는 메슨을 이용한 추가 프로젝트 목록을 작성한다.[24]

참고 항목

참조

  1. ^ "Release 0.62.0".
  2. ^ a b "Making build systems not suck (linux.conf.au video)".
  3. ^ "High productivity build system". Meson aims to optimize programmer productivity by providing simple, out-of-the-box support for modern software development tools and practices, such as unit tests, coverage reports, Valgrind, CCache and the like.
  4. ^ "mesonbuild/meson: The Meson Build System". GitHub. Retrieved 13 April 2016.
  5. ^ "Reference manual".
  6. ^ "Compiler IDs".
  7. ^ a b c d "Meson Frequently Asked Questions".
  8. ^ Baker, Dylan (28 May 2021), dcbaker/meson-plus-plus, retrieved 28 May 2021
  9. ^ "Meson Syntax".
  10. ^ "CMake FILE command". Note: We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed, the generated build system cannot know when to ask CMake to regenerate.
  11. ^ "Non-recursive Make Considered Harmful" (PDF). Recursive Make is considered harmful for very good reasons (Miller 1998); it is not possible to accurately track dependencies when the build system is constructed of separate components that invoke each other.
  12. ^ "Make test does not depend on make all". Kitware issue tracker. 23 June 2016. Retrieved 3 September 2020.
  13. ^ "CMake support for precompiled headers". Retrieved 13 March 2018.
  14. ^ "Dependencies with custom lookup functionality — Meson documentation".
  15. ^ a b "Wrap dependency system manual".
  16. ^ "Meson and 3rd party dependencies. Only one correct way".
  17. ^ "FetchContent — CMake 3.15.7 Documentation".
  18. ^ "Cross compilation".
  19. ^ a b "GNOME Goal: Port modules to use Meson build system".
  20. ^ "GNOME 3.26 Beta Debuts: More Meson Porting, Wayland Action".
  21. ^ "Drop support for autotools".
  22. ^ "Meson Support Has Landed In The X.Org Server".
  23. ^ "Mesa Developers Move Closer To Dropping Autotools Build System In Favor Of Meson".
  24. ^ "List of projects using Meson".

외부 링크