Makefile local sin contaminar el proyecto

2026-03-13

post-thumb

En todo proyecto personal mío, lo primero que hago es crear un Makefile con los comandos que más uso. make server, make test, make build. Nunca necesito recordar nada, solo miro el Makefile y listo.

En el proyecto de la empresa donde trabajo, usamos Nx y no existe Makefile. Los comandos son todos vía npx nx. Funcionan bien, pero yo quería mantener mi workflow de siempre: abrir la terminal y ejecutar make server.


El problema

No puedo simplemente crear un Makefile en el proyecto. Sería contaminar el repositorio con config personal. Tampoco puedo agregar Makefile en el .gitignore del proyecto por la misma razón.

Y no puedo poner Makefile en el ignore global (~/.gitignore) porque uso Makefile en todos mis proyectos personales y los commiteo.


La solución

Creé una convención personal: usar el nombre local.mk para Makefiles locales. Agregué local.mk en mi ~/.gitignore global, y sobrescribí el comando make en mi aliases.zsh personal de Oh-My-Zsh:

make() {
  if [[ -f local.mk && $# -gt 0 ]]; then
    command make -f local.mk "$@"
  else
    command make "$@"
  fi
}

Si existe un local.mk en el directorio actual y paso argumentos, usa el archivo local. Si no existe, ejecuta make normalmente. Los proyectos personales con Makefile siguen funcionando como siempre.


En la práctica

En el proyecto de la empresa, creé un local.mk con los comandos que necesito:

.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

Ahora ejecuto make server y levanta la base de datos y la API de una vez. make db levanta solo la base de datos. make api levanta solo la API. Todo dentro del workflow al que ya estoy acostumbrada, sin tocar nada del repositorio.