Eu gosto de Makefiles
(switowski.com)-
Eu gosto de Makefiles. Faz mais de 10 anos desde a primeira vez que usei um. Mesmo naquela época, já parecia uma tecnologia antiga. Com o passar do tempo, novas ferramentas de build surgiram e desapareceram, mas o Makefile continuou sendo usado. Fui me acostumando com ele ao participar de projetos e, em algum momento, passei a gostar dele. Hoje, é a primeira ferramenta de automação que uso ao começar um novo projeto.
-
O motivo de eu gostar de Makefiles é que eles seguem uma convenção informal de implementar o mesmo conjunto de comandos. Quando encontro um projeto novo e ele tem um arquivo
Makefile, eu executomakeoumake build, depoismake install, e o projeto é compilado e configurado. Ou então consigo descobrir informações sobre etapas adicionais. -
Tento aplicar a mesma convenção nos meus próprios projetos. Se eu abrir a pasta de um projeto antigo e executar
make dev, ele realiza todas as etapas necessárias para compilar o projeto e iniciar o servidor de desenvolvimento. Como já usei várias tecnologias diferentes, cada uma tinha comandos distintos. Com um Makefile, fica fácil gerenciar até projetos que ficaram meses ou anos sem manutenção. -
Makefiles são simples. Eu não uso condicionais, flags ou outros recursos complexos. A maioria das tarefas é composta por um ou mais comandos de shell. Eu até poderia escrever um script bash com algumas funções, mas um Makefile é mais fácil e rápido de escrever.
-
A maioria dos projetos pessoais inclui tarefas comuns como estas:
dev: iniciar o servidor de desenvolvimentobuild: compilar o projeto (se houver uma etapa de build necessária)deploy: fazer o deploy/publicar o projeto
-
Este blog tem um Makefile simples com um único target:
dev: npm run dev -
Em projetos mais complexos, uso Makefiles como este:
# Executar servidor de desenvolvimento dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # Compilar assets build: npm run gulp build # Observar pastas específicas e processar assets watch: npm run gulp watch -- --wip # Compilar o site localmente, criptografar e fazer deploy no servidor da Netlify deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # Criptografar a pasta "_site" encrypt: npx staticrypt _site/*.html -r -d _site -
No exemplo acima, estou ignorando a existência de targets phony. Se houver um arquivo chamado
dev,build,watch,deployouencrypt, o Makefile pode não funcionar como esperado. -
O GNU Make é extremamente comum. No Linux, é bem provável que já esteja instalado. Também não me lembro de tê-lo instalado explicitamente no meu MacBook. Provavelmente veio junto com outras ferramentas. O Make é simples e tem menos dependências adicionais do que outras ferramentas de build. Isso pode ser útil em ambientes restritos. Há uma grande chance de o Make já estar disponível. Se não estiver, ainda dá para executar manualmente no shell os comandos do Makefile.
-
Isso não significa que eu seja contra outras ferramentas de build. Acho interessante quando descubro uma ferramenta nova. Mas ainda uso o Make para gerenciar várias ferramentas diferentes.
Resumo do GN⁺
- O Makefile facilita o gerenciamento ao fornecer um conjunto consistente de comandos em vários tipos de projeto.
- Com sintaxe simples e poucas dependências, ele também pode ser útil em ambientes restritos.
- Pode ser usado junto com várias ferramentas de build, o que lhe dá bastante flexibilidade.
- Ferramentas com funções parecidas incluem
CMake,NinjaeGradle.
2 comentários
Se o
makefilenão define dependências, substituí-lo por umjustfileoferece uma usabilidade melhor.Comentários do Hacker News
Incentivo ao uso de Make
Problemas dos Makefiles
Vantagens do Make
Uso de targets PHONY
mtimePHONYjustejustfilespara usar algo mais simplesDebate acalorado sobre Make
Vários usos do Make
Limites e alternativas ao Make
configuremtimepara verificar se a entrada está atualizada, mas isso pode causar problemasMigração para Justfiles
Uso simples de Makefile