O que é o Make? A clássica ferramenta de automação de build explicada
O Make é uma clássica ferramenta de automação de build que executa comandos com base em regras em um Makefile, reconstruindo apenas os targets cujas dependências mudaram.
O Make automatiza builds desde os anos 1970 e ainda está em toda parte. Você escreve regras descrevendo como produzir arquivos (ou executar tarefas) e suas dependências, e o Make descobre o que precisa ser executado. Muitos projetos o usam simplesmente como um task runner conveniente e independente de linguagem.
O que é o Make
O Make é uma ferramenta de automação de build orientada por um Makefile. Cada regra tem um target, pré-requisitos e uma receita de comandos de shell. O Make compara os timestamps dos targets e pré-requisitos para decidir o que está desatualizado e executa apenas as receitas necessárias, em ordem de dependência.
Targets e dependências
Um target depende de pré-requisitos; se algum pré-requisito for mais novo que o target, o Make executa a receita para reconstruí-lo. Esse rastreamento de dependências evita trabalho redundante. Targets "phony" (como "test" ou "build") são tarefas que não produzem um arquivo, usadas para dar aos projetos comandos nomeados simples.
Um exemplo de Makefile
Targets phony dão a um projeto comandos práticos.
.PHONY: build test
build:
npm run build
test:
npm testPapel em CI/CD
Em CI, o Make é frequentemente usado como uma fina camada de tarefas independente de linguagem: o pipeline apenas executa "make build" e "make test", e o Makefile contém os comandos reais. Isso mantém a config de CI simples e permite que os desenvolvedores executem exatamente os mesmos comandos localmente. A lógica de rebuild baseada em timestamps do Make também pode pular trabalho inalterado em builds que produzem arquivos.
Alternativas
O Just é um command runner moderno com sintaxe mais limpa e sem a bagagem de build-graph. O Task (Taskfile) é uma alternativa baseada em YAML. Para builds grandes, Bazel e CMake oferecem tratamento de dependências muito mais poderoso. O Make persiste por sua ubiquidade e simplicidade como task runner.
Principais conclusões
- O Make executa receitas com base em targets e suas dependências.
- Ele reconstrói apenas o que está desatualizado, usando timestamps de arquivos.
- Em CI ele costuma servir como um task runner simples e compartilhado para build e test.