닌자(Ninja)는 속도에 중점을 둔 소형 빌드 시스템이다. 다른 빌드 시스템과 다른 점은 상위 레벨 빌드 시스템에서 입력 파일을 생성하도록 설계되었으며 최대한 빨리 빌드를 실행하도록 설계된 것이다.
Make는 증분 빌드(또는 무연산 빌드)를 수행할 때 안정성을 위해 속도가 상대적으로 느려진다.[3][4] 이렇게하면 예를 들어 약39,000 개의 입력 파일을 하나의 실행 파일로 컴파일하는[5] 크로미움(chromium) 과 같은 대규모 프로젝트에서 작업하는 개발자의 작업 속도가 상당히 느려질 수 있다. 실제로 크롬(chrome)은 Ninja[6]의 주요 사용자이다.
이러한 의미로 닌자(Ninja)는 Make를 대체하기 위한 것일 수 있다.
Make 와는 달리 Ninja 빌드 파일은 손으로 직접 작성하지 않으므로 Ninja에는 문자열 조작과 같은 기능이 없다. 대신 닌자(Ninja) 빌드 파일을 생성하려면 "빌드 생성기"를 사용해야 한다. 전통적인 CMake 같은 다른 빌드 관리 소프트웨어도[7] 닌자(Ninja)[8]에 대한 빌드 파일 생성을 지원한다.
일부 대형 프로젝트에서는 닌자 빌드 파일 생성기를 별도로 제공하는데, 일례로 크로미움 프로젝트는 GN이라는 닌자 빌드 파일 생성기를 소스코드 관련 툴(depot tolos)을 배포시 포함한다.[9]
타이젠과 같은 SDK IDE도 닌자 빌드 시스템을 사용한다.
기타기능
- 닌자는 빌드 과정에서 서브커맨드(subcommand) 실패(failed) 및 심각한 오류(fatal error) 상황을 감지하고 실행을 중단한다. 하지만 이러한 에러 상황에 대한 사용자에의한 문제 해결후 재실행시, 다시 중단점부터 복귀해서 빌드를 이어서 계속해서 마무리하는 복원 기능을 가지고있다.
- 닌자는 빌드 시스템 임으로 역시 배포용 인스톨러를 결과물로 하는 installer 프로그램 생성을 빌드할 수 있다.[10]
예시
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
같이 보기
각주
외부 링크