2026-03-13

Em todo projeto pessoal meu, a primeira coisa que faço é criar um Makefile com os comandos que mais uso. make server, make test, make build. Nunca preciso lembrar de nada, só olho o Makefile e pronto.
No projeto da empresa onde trabalho, usamos Nx e não existe Makefile. Os comandos são todos via npx nx. Funcionam bem, mas eu queria manter meu workflow de sempre: abrir o terminal e rodar make server.
Não posso simplesmente criar um Makefile no projeto. Seria poluir o repositório com config pessoal. Também não posso adicionar Makefile no .gitignore do projeto pelo mesmo motivo.
E não posso colocar Makefile no ignore global (~/.gitignore) porque uso Makefile em todos os meus projetos pessoais e commito eles.
Criei uma convenção pessoal: usar o nome local.mk para Makefiles locais. Adicionei local.mk no meu ~/.gitignore global, e sobrescrevi o comando make no meu aliases.zsh pessoal do Oh-My-Zsh:
make() {
if [[ -f local.mk && $# -gt 0 ]]; then
command make -f local.mk "$@"
else
command make "$@"
fi
}
Se existir um local.mk no diretório atual e eu passar argumentos, ele usa o arquivo local. Se não existir, roda o make normalmente. Projetos pessoais com Makefile continuam funcionando como sempre.
No projeto da empresa, criei um local.mk com os comandos que preciso:
.PHONY: server db api
server:
trap 'kill 0' INT TERM; npx nx up db & sleep 5 && npx nx serve api & wait
db:
npx nx up db
api:
npx nx serve api
Agora rodo make server e sobe o banco e a API de uma vez. make db sobe só o banco. make api sobe só a API. Tudo dentro do workflow que já estou acostumada, sem tocar em nada do repositório.