생성 도구와 나누는 역할
Ninja 파일은 사람이 복잡한 조건을 직접 작성하기보다 다른 프로그램이 생성하는 사용을 지향한다. 컴파일러 옵션이나 빌드 모드의 결정은 생성 도구에서 수행한다. Ninja는 입력과 출력 사이의 관계 및 실행할 명령을 받아 필요한 작업을 수행한다.
다시 빌드할 대상의 판단
파일 시각을 활용해 오래된 타깃을 찾고 명령행 변경도 출력의 재생성 조건으로 다룬다. C와 C++의 헤더처럼 빌드 중 발견하는 추가 의존성도 지원한다. 하나의 빌드 단계에서 여러 출력을 정의할 수 있으며 올바른 증분 실행에는 빠짐없는 의존 관계가 필요하다.
병렬 실행과 출력
독립적인 빌드 명령을 병렬로 수행하고 출력은 작업별로 모아 서로 뒤섞이지 않게 한다. 실패한 작업의 전체 명령과 출력을 함께 확인할 수 있다. C 컴파일 같은 내장 기본 규칙을 제공하는 도구가 아니므로 실제 실행 규칙은 생성된 빌드 정의에 담겨 있어야 한다.