Makefile local sem poluir o projeto

2026-03-13

post-thumb

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.


O problema

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.


A solução

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.


Na prática

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.