Skip to content
Latchkey

Ninja vs Make: Builds Incrementais Mais Rápidos?

Ninja é um build backend minimalista e muito rápido feito para ser gerado por ferramentas como o CMake; Make é a clássica ferramenta de build escrita à mão.

O Ninja deliberadamente faz pouco por design: ele lê um arquivo build.ninja gerado e executa o grafo de dependências o mais rápido possível, com inicialização veloz e excelente paralelismo. Você raramente escreve Ninja à mão - CMake, Meson ou gn o geram. O Make é escrito por humanos, mais rico como linguagem e onipresente, mas seus builds incrementais costumam ser mais lentos que os do Ninja em grafos grandes.

NinjaMake
AutoriaGeradoEscrito à mão
VelocidadeMuito rápidoMais lento em grafos grandes
Recursos da linguagemMinimalista por designRico (funções, regras)
Combinação comumCMake / MesonIsolado ou gerado
Melhor paraBuilds gerados rápidosLógica de build escrita à mão

No CI

Para grandes builds C/C++ conduzidos por CMake ou Meson, gerar Ninja dá builds incrementais mais rápidos e melhor paralelismo que o Make. O Make continua adequado para builds menores ou escritos à mão e vem pré-instalado em todo lugar. Na prática, muitos times escrevem CMake/Meson e deixam que ele emita Ninja pela velocidade.

Acelere

Faça cache dos objetos compilados com ccache/sccache e do diretório de build para que os builds incrementais comecem aquecidos. Ambos rodam em runners de CI; runners gerenciados mais rápidos encurtam as etapas de compilação e link.

O veredito

Compilar grandes projetos C/C++ gerados e querer os builds incrementais mais rápidos: Ninja (via CMake ou Meson). Escrever a lógica de build à mão ou trabalhar em projetos pequenos: o Make é mais simples e universal. O padrão comum é CMake/Meson gerando Ninja.

Guias relacionados