Skip to content

Instantly share code, notes, and snippets.

@byque
Last active March 9, 2018 22:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save byque/dff9f0ab367f74cd6b257c2f5cb035ac to your computer and use it in GitHub Desktop.
Save byque/dff9f0ab367f74cd6b257c2f5cb035ac to your computer and use it in GitHub Desktop.
Plantilla Makefile C++
###############################################################################
# Plantilla de Makefile para C++ con funciones avanzadas
# Probado con Cygwin en Windows 10 64-Bit
#
# Copyright (C) 2015 por Joel Bodenmann <joel@embedded.pro>
# https://blog.embedded.pro/de1-soc-a-better-makefile/
# Modificado el 9 de Marzo de 2018 por Byron Quezada <github.com/byque>
#
# Se puede usar este Makefile libremente pero sin garantías y bajo el riesgo
# del usuario.
###############################################################################
# Éste es el nombre del binario que será generado
TARGET = holabinario
# Aquí añadimos todos los archivos *.cc que se quieren compilar
CPPSRCS = holafuncion.cc holamain.cc
# Aquí añadimos las rutas a los directorios include
IDIR = ../include
# Aquí añadimos las librerías estándar que se van a usar
LIBS = -lm
# Configuración del compilador
CPPC = g++
CPPFLAGS = -g -std=c++11 -Wall
LDFLAGS = -g -Wall
###############################################################################
# No cambiar nada después de esta línea
###############################################################################
BINDIR = ../bin
BUILDDIR = ../build
OBJDIR = $(BUILDDIR)/obj
# Generar el nombre de los archivos objeto
OBJS = $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(CPPSRCS:%.c=%.o))))
# Añadir las rutas
CPPFLAGS += $(IDIR:%=-I %)
LDFLAGS += $(IDIR:%=-I %)
# Añadir las librerías estándar
LDFLAGS += $(LIBS)
# Aquí se definen los archivos generados por defecto cuando el usuario llama
# solamente 'make'
all: build size
# Crear todos los archivos y el binario
build: builddirs $(BINDIR)/$(TARGET)
# Crear los directorios requeridos (si no existen previamente)
builddirs:
@echo
@echo "Creando directorios..."
@mkdir -p $(BINDIR)
@mkdir -p $(BUILDDIR)
@mkdir -p $(OBJDIR)
# Enlazar todo junto
$(BINDIR)/$(TARGET): $(OBJS)
@echo
@echo Enlazando $@
@$(CPPC) $(LDFLAGS) -o $(BINDIR)/$(TARGET) $(OBJS)
# Compilar los archivos en c++
$(OBJDIR)/%.o: %.cc
@mkdir -p $(dir $@)
@echo
@echo Compilando $^
@$(CPPC) $(CPPFLAGS) -c -o $@ $^
# Imprimir la información del tamaño
size: $(BINDIR)/$(TARGET)
@echo
size $^
# Limpiar código
clean:
@echo
@echo "Limpiando..."
@rm -rf $(BINDIR) $(BUILDDIR) $(OBJS) $(TARGET) $(TARGET).* *.a *.o *~
@echo
@echo "Limpieza terminada!"
# Clean debe ser phony tal que make nunca salga de ejecución como un archivo
.PHONY: clean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment