Makefiles são comumente usados para projetos em C e derivados porque automatizam a compilação de vários arquivos .c e .h. Sem um Makefile, seria necessário escrever comandos extensos para compilar cada arquivo, algo que se torna cada vez mais trabalhoso à medida que o projeto cresce, exigindo muitas flags de compilação e outras configurações.
No entanto, antes de tudo, o Makefile serve para automatizar tarefas repetitivas. Recentemente, estava trabalhando em um projeto com Docker e percebi o quão chato é escrever comandos Docker, como subir containers, executar comandos dentro deles e rodar testes manualmente.
Felizmente, isso pode ser resolvido com um Makefile simples.
Exemplo de Makefile para gerenciar um projeto Docker:
.PHONY: up composer test bash help
APP_CONTAINER=my-service-container
up: docker compose up -d
composer: docker compose exec $(APP_CONTAINER) composer $(filter-out $@,$(MAKECMDGOALS))
test: docker compose exec $(APP_CONTAINER) composer run test
bash: docker compose exec $(APP_CONTAINER) bash
help: @echo "Comandos disponíveis:" @echo " make up - Sobe os containers" @echo " make composer - Executa comandos do Composer dentro do container" @echo " make test - Executa os testes do projeto" @echo " make bash - Abre um terminal no container" @echo " make help - Exibe esta ajuda"Cada comando tem uma função específica:
.PHONY: Garante que os alvos sejam sempre executados, mesmo que existam arquivos com o mesmo nome.APP_CONTAINER=my-service-container: Define o nome do container onde os comandos serão executados.up: Sobe os containers definidos nodocker-compose.ymlem mododetached(-d).composer: Facilita a execução de comandos do Composer dentro do container.test: Executa os testes do projeto chamando o Composer dentro do container.bash: Abre um terminal dentro do container.help: Exibe uma lista de comandos disponíveis.
Após criar esse Makefile na raiz do seu projeto, basta executar os seguintes comandos:
make up # Sobe os containersmake composer install # Executa 'composer install' dentro do containermake test # Executa os testesmake bash # Abre um terminal no containermake help # Exibe os comandos disponíveisDessa forma, evitamos escrever comandos longos e repetitivos, tornando o desenvolvimento mais ágil e padronizado.
Além da praticidade, o uso do Makefile traz benefícios como:
- Facilidade e agilidade: Reduz a necessidade de digitar comandos extensos.
- Padronização: Toda a equipe utiliza os mesmos comandos.
- Automação: Permite adicionar novas tarefas facilmente, como limpeza de containers.
- Simplicidade:
makeé nativo em sistemas Unix e pode ser instalado no Windows sem dificuldades.
Bom, usando Makefiles há um mundo de funcionalidades possíveis para adicionar ao seu projeto.