닌자 (빌드 시스템)

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

Ninja
개발자에반 마틴(Evan Martin)
발표일2012년(12년 전)(2012)[1]
안정화 버전
1.11.0[2] / 2022년 5월 15일(23개월 전)(2022-05-15)
저장소
프로그래밍 언어C++, 파이썬
운영 체제크로스 플랫폼
종류프로그래밍 도구
라이선스아파치 라이센스 2.0
상태개발 중
웹사이트ninja-build.org/ 위키데이터에서 편집하기

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

같이 보기 편집

각주 편집

  1. Martin, Evan. “Google Groups: ninja-build”. 2017년 6월 18일에 확인함. 
  2. “Releases - ninja-build/ninja”. 2022년 6월 20일에 확인함. 
  3. 증분 빌드
  4. Röthlisberger, David. “The Ninja build tool”. 《LWN》. 2017년 6월 18일에 확인함. 
  5. 크로미움,버전 62.0.3195.0-개발자 빌드,32비트
  6. Metz, Cade. “Google man open sources Chrome build system”. 《The Register》. 2017년 6월 18일에 확인함. 
  7. http://lethean.github.io/2016/03/17/about-ninja-build/
  8. Kitware. “cmake Documentation”. 2017년 6월 18일에 확인함. 
  9. https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md
  10. (chromium 빌드)$ ninja -C out/Default mini_installer

외부 링크 편집