본문으로 이동

Meson

위키백과, 우리 모두의 백과사전.
Meson
개발자Jussi Pakkanen
발표일2013년 3월 2일(13년 전)(2013-03-02)
안정화 버전
1.10.0[1] 위키데이터에서 편집하기 / 2025년 12월 8일(2개월 전)(2025년 12월 8일)
저장소
프로그래밍 언어파이썬
운영 체제크로스 플랫폼
종류소프트웨어 개발 도구
라이선스아파치 라이선스 2.0
웹사이트mesonbuild.com 위키데이터에서 편집하기

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

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

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

언어

[편집]

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

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

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

속도 및 정확성

[편집]

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

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

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

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

기능

[편집]

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

하위 프로젝트

[편집]

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

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

교차 컴파일

[편집]

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

설치 디렉터리 설정

[편집]

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

채택자

[편집]

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

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

기능 비교

[편집]

CMakeMake와의 기능 비교.

기능MesonCMakeMake
데이터 형식아니요아니요
목록 데이터 형식세미콜론으로 구분된 문자열공백으로 구분된 문자열
사전 데이터 형식0.47.0부터아니요아니요
파일 글로빙아니요일부 변형의 비표준 확장
사용자 정의 함수를 통한 확장아니요아니요
임의 명령의 출력 읽기 (구성 시점)run_command
빌드 시점에 임의 명령 실행 (사용자 정의 대상의 레시피로)
오래된 빌드 방지 (입력 변경에 대한 부분 재빌드)예 (버그가 없는 한)소스 파일 글로빙이 아닌 경우재귀적 Make (관용적인 패턴)는 이 점에서 문제가 있다[27]
테스트를 실행하는 대상은 빌드된 테스트에 의존한다 (예: testall에 의존)아니요, 그리고 add_dependencies(test all)은 금지된다. test 대상이 예약되어 있기 때문이다.[28]추가하기 매우 쉽다
Ccache자동추가하기 매우 쉽다추가하기 매우 쉽다
Distcc추가하기 매우 쉽다추가하기 매우 쉽다추가하기 매우 쉽다
심볼 테이블 인식 재링크직접 해야 한다직접 해야 한다
프리컴파일러 헤더선택 사항CMake ≥ 3.16[29][2]직접 해야 한다
설치된 종속성 찾기pkg-config, CMake 패키지CMake 모듈, pkg-config
종속성 자동 다운로드하위 프로젝트FetchContent[30]
설치된 종속성 찾기, 다운로드 폴백 포함pkg-config + 하위 프로젝트CMake 모듈/pkg-config + FetchContent
pkg-config 파일 생성기아니요
자동 다운로드 가능한 종속성으로 사용 용이성Meson 하위 프로젝트로 사용 가능아니요

같이 보기

[편집]

각주

[편집]
  1. Release 1.10.0. 2025년 12월 8일. 2025년 12월 10일에 확인함.
  2. 1 2 Making build systems not suck (linux.conf.au video). 유튜브. 2015년 1월 16일.
  3. High productivity build system. 2025년 1월 30일. 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. 2016년 4월 13일에 확인함.
  5. Reference manual.
  6. Compiler IDs.
  7. How to build SciPy with Meson.
  8. meson-python package on PyPI.
  9. 1 2 3 4 Meson Frequently Asked Questions.
  10. muon.build. 2023년 1월 27일에 확인함.
  11. Baker, Dylan (2021년 5월 28일). dcbaker/meson-plus-plus. 깃허브. 2021년 5월 28일에 확인함.
  12. Meson Syntax.
  13. 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.
  14. Feature Autodetection.
  15. Precompiled headers.
  16. Unity builds.
  17. Unit-tests.
  18. Dependencies with custom lookup functionality — Meson documentation.
  19. 1 2 Wrap dependency system manual.
  20. Meson and 3rd party dependencies. Only one correct way.
  21. Cross compilation.
  22. 1 2 GNOME Goal: Port modules to use Meson build system.
  23. GNOME 3.26 Beta Debuts: More Meson Porting, Wayland Action.
  24. Drop support for autotools. 깃허브.
  25. Meson Support Has Landed In The X.Org Server.
  26. Mesa Developers Move Closer To Dropping Autotools Build System In Favor Of Meson.
  27. 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.
  28. Make test does not depend on make all. Kitware issue tracker. 2016년 6월 23일. 2020년 9월 3일에 확인함.
  29. CMake support for precompiled headers. 2018년 3월 13일에 확인함.
  30. FetchContent — CMake 3.15.7 Documentation.

외부 링크

[편집]
  • Meson 위키데이터에서 편집하기 - 공식 웹사이트