맨위로가기

닌자 (빌드 시스템)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

닌자는 점증적 빌드를 빠르게 수행하기 위해 설계된 빌드 시스템이다. 대규모 프로젝트에서 느린 Make를 대체하기 위해 개발되었으며, 구글 크롬, 안드로이드 빌드, LLVM 등에서 사용된다. 닌자는 문자열 조작과 같은 기능을 제공하지 않으며, Gyp, CMake, Meson 등의 빌드 생성기를 통해 빌드 파일을 생성한다. 서브커맨드 실패 시 실행을 중단하고, 문제 해결 후 중단된 지점부터 재개하는 복원 기능을 제공하며, 인스톨러 생성도 빌드할 수 있다.

더 읽어볼만한 페이지

  • 빌드 자동화 - GNU 빌드 시스템
    GNU 빌드 시스템은 Autoconf, Automake, Libtool 등의 오토툴과 GNU make 등으로 구성되어 다양한 UNIX 시스템에서 소프트웨어 빌드 및 설치를 지원하지만, 복잡성과 이식성에 대한 비판도 존재한다.
  • 빌드 자동화 - MSBuild
    MSBuild는 마이크로소프트에서 개발한 빌드 자동화 도구로서, 프로젝트 파일에 기술된 대상을 실행하여 빌드 과정을 자동화하며, Team Foundation 빌드와 연동하여 팀 빌드 환경을 구성하는 데 사용된다.
닌자 (빌드 시스템) - [IT 관련 정보]에 관한 문서
일반 정보
이름닌자
유형빌드 자동화 소프트웨어
개발자에반 마틴
출시일2012년
최신 안정화 버전1.11.0
최신 안정화 버전 출시일2022년 5월 15일
프로그래밍 언어C++, 파이썬
운영 체제리눅스, macOS, 마이크로소프트 윈도우
장르소프트웨어 개발 도구
라이선스아파치 라이선스 2.0
추가 정보
특징속도에 중점을 둔 빌드 시스템
사용 예시크로미움, LLVM, 안드로이드 운영체제 등 대규모 프로젝트 빌드
설명작은 코드 베이스와 의존성 최소화를 목표로 설계됨

2. 빌드 시스템

닌자는 Make와 같은 기존 빌드 시스템이 점증적 빌드를 수행할 때 발생하는 속도 저하 문제를 해결하기 위해 개발되었다.[4] 특히 구글 크롬과 같이 입력 파일 수가 수만 개에 달하는 대규모 프로젝트의 빌드 시간을 단축하는 데 효과적이며, 실제로 구글 크롬은 닌자 개발의 주요 동기가 되었다.[5] 닌자 빌드 파일은 사람이 직접 작성하기보다는 Gyp, CMake, Meson, 그리고 gn[8]과 같은 별도의 빌드 생성기(build generator)를 통해 생성하는 방식으로 사용된다.[9]

2. 1. 특징

닌자는 점증적(또는 무의미한) 빌드를 수행할 때 느린 Make를 대체하기 위해 만들어졌다.[4] 특히 구글 크롬과 같이 입력 파일이 4만 개에 달하는 대규모 프로젝트에서 Make의 느린 속도는 개발자의 작업 효율을 크게 저하시킬 수 있는데, 닌자는 이러한 문제를 해결하는 데 중점을 둔다. 실제로 구글 크롬은 닌자의 주요 사용자이자 개발 동기가 되었다.[5] 또한, ''Kati''에 의한 Makefile 변환을 통해 안드로이드 빌드에도 사용되며,[6] LLVM 프로젝트 개발자 대부분이 닌자를 사용한다.[7]

Make와 달리 닌자는 문자열 조작과 같은 복잡한 기능을 내장하고 있지 않다. 이는 닌자 빌드 파일(`.ninja` 파일)이 사람이 직접 작성하는 것을 염두에 두지 않고 설계되었기 때문이다. 대신, Gyp, CMake, Meson, 그리고 gn[8]과 같은 "빌드 생성기" 프로그램을 사용하여 닌자 빌드 파일을 생성해야 한다.[9] 이러한 설계는 닌자가 빌드 속도 자체에 집중하고, 빌드 과정의 복잡한 로직 처리는 상위 빌드 관리 도구에 위임하는 철학을 반영한다.

빌드 과정에서 서브커맨드(subcommand) 실패나 심각한 오류(fatal error)가 발생하면 닌자는 실행을 중단한다. 하지만 사용자가 해당 문제를 해결하고 빌드를 다시 실행하면, 중단되었던 지점부터 작업을 이어서 완료하는 복원 기능을 제공한다.

또한 닌자는 기본적인 빌드 시스템 역할 외에도, 최종 결과물로 배포용 인스톨러 프로그램을 생성하는 작업도 지원한다.[25]

2. 2. 활용 사례

닌자는 기존의 Make가 점증적 빌드 또는 변경 사항이 없는 빌드를 수행할 때 느리다는 단점을 개선하기 위해 개발되었다.[4] 특히 구글 크롬처럼 입력 파일이 수만 개에 달하는 대규모 프로젝트의 경우, Make의 느린 속도는 개발 시간을 지연시킬 수 있었다. 실제로 구글 크롬은 닌자를 사용하는 대표적인 프로젝트이며, 닌자 개발의 주요 동기가 되었다.[5]

또한 닌자는 안드로이드 빌드 시스템에서도 사용된다. 이는 'Kati'라는 도구를 통해 기존의 Makefile을 닌자 빌드 파일 형식으로 변환하여 활용한다.[6] LLVM 프로젝트 역시 대부분의 개발자가 닌자를 빌드 시스템으로 사용하고 있다.[7]

3. 예시

make

rule cc

command = gcc -c -o $out $in

description = CC $out

rule link

command = gcc -o $out $in

description = LINK $out

build source1.o: cc source1.c

build source2.o: cc source2.c

build myprogram: link source1.o source2.o

4. 기타 기능


  • 닌자는 빌드 과정에서 서브커맨드(subcommand) 실패나 심각한 오류(fatal error)가 발생하면 실행을 중단한다. 하지만 사용자가 문제를 해결하고 다시 실행하면, 중단된 지점부터 빌드를 이어서 완료할 수 있는 복원 기능을 제공한다.
  • 또한, 닌자는 빌드 시스템으로서 배포용 인스톨러 프로그램을 생성하는 빌드도 지원한다.[25]

참조

[1] 웹사이트 Google Groups: ninja-build https://groups.googl[...] 2017-06-18
[2] 웹사이트 COPYING https://github.com/n[...] 2019-09-05
[3] 웹사이트 Google man open sources Chrome build system https://www.theregis[...]
[4] 웹사이트 The Ninja build tool https://lwn.net/Arti[...] 2017-06-18
[5] 웹사이트 Ninja http://www.aosabook.[...] 2017-06-18
[6] 웹사이트 aosp mailing list https://groups.googl[...]
[7] 웹사이트 LLVM documentation https://llvm.org/doc[...]
[8] 웹사이트 gn - Git at Google https://gn.googlesou[...]
[9] 웹사이트 cmake Documentation https://cmake.org/cm[...] 2017-06-18
[10] 웹사이트 release: ninja v120508 https://groups.googl[...] 2012-05-08
[11] 웹사이트 The Ninja build tool https://lwn.net/Arti[...] LWN.net 2016-11-16
[12] 웹사이트 Ninja https://www.aosabook[...]
[13] 웹사이트 Re: ANN: AOSP builds with ninja https://groups.googl[...] 2015-10-28
[14] 웹사이트 Getting Started with the LLVM System https://llvm.org/doc[...] LLVM Project
[15] 웹사이트 Ninja https://cmake.org/cm[...] Kitware, Inc
[16] 웹인용 Google Groups: ninja-build https://groups.googl[...] 2017-06-18
[17] 웹인용 Releases - ninja-build/ninja https://github.com/n[...] 2022-06-20
[18] 문서 증분 빌드 https://msdn.microso[...]
[19] 웹인용 The Ninja build tool https://lwn.net/Arti[...] 2017-06-18
[20] 문서 크로미움,버전 62.0.3195.0-개발자 빌드,32비트 https://chromium.woo[...]
[21] 웹인용 Google man open sources Chrome build system https://www.theregis[...] 2017-06-18
[22] 문서 http://lethean.githu[...]
[23] 웹인용 cmake Documentation https://cmake.org/cm[...] 2017-06-18
[24] 문서 https://chromium.goo[...]
[25] 문서 (chromium 빌드)$ ninja -C out/Default mini_installer



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com