닌자 (빌드 시스템)
닌자(Ninja)는 속도에 중점을 둔 소형 빌드 시스템이다. 구글(Google) 직원인 에반 마틴(Evan Martin)이 개발했으며, 2012년에 처음 발표되었다. 닌자는 다른 빌드 시스템과 두 가지 주요 측면에서 차별화된다. 첫째, 입력 파일을 상위 레벨 빌드 시스템이 생성하도록 설계되었다는 점이고, 둘째, 빌드를 최대한 빠르게 실행하도록 설계되었다는 점이다.
개요
닌자는 기존의 Make 빌드 시스템이 증분 빌드(또는 무연산 빌드)를 수행할 때 안정성을 위해 속도가 상대적으로 느려지는 문제를 해결하기 위해 만들어졌다. 예를 들어 약 39,000개의 입력 파일을 하나의 실행 파일로 컴파일하는 크로미움(Chromium)과 같은 대규모 프로젝트에서 작업하는 개발자의 경우, 빌드 속도 저하가 작업 효율에 상당한 영향을 미칠 수 있다. 실제로 크롬(Chrome)은 닌자의 주요 사용 사례이자 개발 동기이다.
닌자는 Make와 달리 빌드 파일을 손으로 직접 작성하는 것을 전제로 하지 않으므로, 문자열 조작과 같은 고급 기능을 갖추지 않았다. 대신 닌자 빌드 파일을 생성하기 위해 "빌드 생성기(build generator)"를 사용해야 한다. CMake, Meson, GN 등이 닌자용 빌드 파일 생성을 지원하는 대표적인 도구이다. 일부 대형 프로젝트는 자체적으로 닌자 빌드 파일 생성기를 제공하기도 하는데, 크로미움 프로젝트는 GN이라는 생성기를 소스코드 관련 도구(depot tools)에 포함하여 배포한다.
기술적 특징
- 닌자는 C++과 파이썬으로 작성되었으며, Linux, macOS, Windows 등 크로스 플랫폼에서 동작한다.
- 라이선스는 아파치 라이선스 2.0(Apache License 2.0)이다.
- 닌자는 빌드 과정에서 서브커맨드(subcommand) 실패 및 심각한 오류(fatal error) 상황을 감지하고 실행을 중단한다. 다만 사용자가 에러를 해결한 후 재실행하면, 중단된 지점부터 빌드를 이어서 완료하는 복원 기능을 갖추고 있다.
- 닌자는 빌드 시스템이므로 배포용 인스톨러(installer) 프로그램 생성도 빌드할 수 있다.
사용 분야
닌자는 크로미움, 안드로이드(Android), LLVM 등 대규모 소프트웨어 프로젝트의 빌드에 널리 사용된다. 안드로이드는 Kati라는 도구를 통해 Makefile을 닌자 빌드 파일로 변환하여 사용하며, LLVM 개발자들도 대부분 닌자를 사용한다. 또한 타이젠(Tizen)과 같은 SDK IDE에서도 닌자 빌드 시스템을 채택하고 있다.
예시
다음은 두 개의 C 소스 파일을 컴파일하여 실행 파일을 링크하는 닌자 빌드 파일의 예시이다.
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
공식 정보
- 공식 웹사이트: ninja-build.org
- 저장소: github.com/ninja-build/ninja
- 안정화 버전: 1.13.2 (2025년 11월 20일 기준)