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:
1.PHONY: up composer test bash help2
3APP_CONTAINER=my-service-container4
5up:6 docker compose up -d7
8composer:9 docker compose exec $(APP_CONTAINER) composer $(filter-out $@,$(MAKECMDGOALS))10
11test:12 docker compose exec $(APP_CONTAINER) composer run test13
14bash:15 docker compose exec $(APP_CONTAINER) bash16
17help:18 @echo "Comandos disponíveis:"19 @echo " make up - Sobe os containers"20 @echo " make composer - Executa comandos do Composer dentro do container"21 @echo " make test - Executa os testes do projeto"22 @echo " make bash - Abre um terminal no container"23 @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:
1make up # Sobe os containers2make composer install # Executa 'composer install' dentro do container3make test # Executa os testes4make bash # Abre um terminal no container5make 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.