{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name =Ninja
| developer              = 에반 마틴(Evan Martin)
| screenshot             = Compiling dav1d screenshot.png
| released               = {{시작 날짜와 나이|2012}}<ref>{{웹 인용|last1=Martin|first1=Evan|url=https://groups.google.com/forum/#!searchin/ninja-build/release%7Csort:date/ninja-build/wtfGmg0IoXQ/eH_tgL8eF8YJ|title=Google Groups: ninja-build|accessdate=18 June 2017}}</ref>
| latest release version = 1.11.0<ref>{{웹 인용|url=https://github.com/ninja-build/ninja/releases|title=Releases - ninja-build/ninja|accessdate=20 June 2022}}</ref>
| latest release date    = {{시작 날짜와 나이|2022|05|15}}
| status                 = 개발 중
| programming language   = [[C++]], [[파이썬]]
| operating system       = [[크로스 플랫폼]]
| genre                  = [[프로그래밍 도구]]
| license                = [[아파치 라이센스 ]]2.0
}}

'''닌자'''(Ninja)는 속도에 중점을 둔 소형 [[소프트웨어 빌드|빌드]] 시스템이다. 다른 빌드 시스템과 다른 점은 상위 레벨 빌드 시스템에서 입력 파일을 생성하도록 설계되었으며 최대한 빨리 빌드를 실행하도록 설계된 것이다.

[[Make (소프트웨어)|Make]]는 [[증분 빌드]](또는 무연산 빌드)를 수행할 때 안정성을 위해 속도가 상대적으로 느려진다.<ref>[https://msdn.microsoft.com/ko-kr/library/ee264087.aspx 증분 빌드]</ref><ref>{{웹 인용|last1=Röthlisberger|first1=David|title=The Ninja build tool|url=https://lwn.net/Articles/706404/|website=LWN|accessdate=18 June 2017}}</ref> 이렇게하면 예를 들어 약39,000 개의 입력 파일을 하나의 실행 파일로 컴파일하는<ref>[https://chromium.woolyss.com/download/ko/ 크로미움,버전 62.0.3195.0-개발자 빌드,32비트]</ref> [[크로미엄 (웹 브라우저) |크로미움]](chromium) 과 같은 대규모 프로젝트에서 작업하는 개발자의 작업 속도가 상당히 느려질 수 있다. 실제로  [[구글 크롬 |크롬]](chrome)은 Ninja<ref>{{웹 인용|last1=Metz|first1=Cade|title=Google man open sources Chrome build system|url=https://www.theregister.co.uk/2011/02/08/google_ninja_build_system_open_sourced/|website=The Register|accessdate=18 June 2017}}</ref>의 주요 사용자이다.
이러한 의미로  닌자(Ninja)는 [[Make (소프트웨어)|Make]]를 대체하기 위한 것일 수 있다.
Make 와는 달리 Ninja 빌드 파일은 손으로 직접 작성하지 않으므로 Ninja에는 문자열 조작과 같은 기능이 없다. 대신 닌자(Ninja) 빌드 파일을 생성하려면 "빌드 생성기"를 사용해야 한다. 전통적인 [[CMake]] 같은 다른  빌드 관리 소프트웨어도<ref>http://lethean.github.io/2016/03/17/about-ninja-build/</ref> 닌자(Ninja)<ref>{{웹 인용|last1=Kitware|title=cmake Documentation|url=https://cmake.org/cmake/help/v3.8/generator/Ninja.html|accessdate=18 June 2017}}</ref>에 대한 빌드 파일 생성을 지원한다.

일부 대형 프로젝트에서는 닌자  빌드 파일 생성기를 별도로 제공하는데, 일례로 [[크로미엄 (웹 브라우저)|크로미움]] 프로젝트는 [[GN (빌드 시스템) |GN]]이라는 닌자 빌드 파일 생성기를 소스코드 관련 툴(depot tolos)을 배포시 포함한다.<ref>https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md</ref>

[[타이젠]]과 같은 [[소프트웨어 개발 키트|SDK]] [[통합 개발 환경|IDE]]도 닌자 빌드 시스템을 사용한다.

==기타기능==
* 닌자는 [[소프트웨어 빌드|빌드]] 과정에서 서브커맨드(subcommand) 실패(failed) 및 심각한 오류(fatal error) 상황을 감지하고 실행을 중단한다. 하지만  이러한 에러 상황에 대한 사용자에의한 문제 해결후 재실행시, 다시 중단점부터 복귀해서 빌드를 이어서 계속해서 마무리하는 복원 기능을 가지고있다.
* 닌자는 빌드 시스템 임으로 역시 배포용 [[인스톨러]]를 결과물로 하는 installer 프로그램 생성을 빌드할 수 있다.<ref>(chromium 빌드)$ ninja -C out/Default  mini_installer</ref>

== 예시 ==
<syntaxhighlight lang="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
</syntaxhighlight>

== 같이 보기 ==
* [[Make (소프트웨어)|Make]]
* [[컴파일]]
* [[GYP (소프트웨어)|GYP]]
* [[카고 (소프트웨어)|카고]]
* [[머큐리얼]]

== 각주 ==
{{각주}}
* [https://msdn.microsoft.com/ko-kr/library/aa291561(v=vs.71).aspx 중단점과 트리거 복원기능]

== 외부 링크 ==
* [https://ninja-build.org/ 공식 웹사이트]
* {{GitHub|ninja-build/ninja}}

[[분류:빌드 자동화]]