Makefile corregido
# Makefile para gestionar la compilación y organización de archivos de bootloaders
# Variables
SUBDIRS = bootloader_arm bootloader_riscv bootloader_x64 bootloader_x86
DIR_BIN = bin
DIR_IMG = img
MULTIBOOTLOADER = $(DIR_IMG)/multibootloaders.img
# Crear los directorios si no existen
DIRECTORIES = $(DIR_BIN) $(DIR_IMG)
# Target principal
all: create_dirs compile_subdirs organize_files $(MULTIBOOTLOADER)
@echo "Multibootloaders creado exitosamente."
# Crear directorios necesarios
create_dirs:
@mkdir -p $(DIRECTORIES)
@echo "Directorios creados: $(DIRECTORIES)"
# Compilar cada subdirectorio
compile_subdirs:
@for dir in $(SUBDIRS); do \
echo "Compilando en $$dir..."; \
$(MAKE) -C $$dir; \
echo "Compilación completada en $$dir"; \
done
# Mover archivos .bin generados a DIR_BIN
organize_files:
@find $(SUBDIRS) -name "*.bin" -exec mv {} $(DIR_BIN)/ \;
@echo "Archivos binarios movidos a $(DIR_BIN)"
@find $(SUBDIRS) -name "*.elf" -exec rm {} \;
@echo "Archivos .elf eliminados"
@find $(SUBDIRS) -name "*.o" -exec rm {} \;
@echo "Archivos .o eliminados"
# Crear el archivo multibootloaders
$(MULTIBOOTLOADER): $(DIR_BIN)/*.bin
@cat $(DIR_BIN)/*.bin > $@
@echo "Archivo multibootloaders creado: $@"
# Limpieza
clean:
@echo "Limpiando archivos generados..."
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir clean; \
done
rm -rf $(DIRECTORIES)
@echo "Limpieza completada."
# Indicar que estos objetivos no son archivos reales
.PHONY: all clean create_dirs compile_subdirs organize_files
Descripción de los cambios realizados
- Separación de responsabilidades: Las tareas se dividieron en objetivos claros como
create_dirs
,compile_subdirs
,organize_files
yclean
. - Uso correcto de
find
: Los subdirectorios se pasan directamente afind
, evitando errores relacionados con dependencias vacías. - Eliminación de duplicados: Se eliminaron las definiciones redundantes del objetivo
$(SUBDIRS)
. - Mensajes claros: Se añadieron mensajes informativos en cada paso del proceso para facilitar el seguimiento.
Uso del Makefile
1. Para compilar y organizar los archivos:
make
Esto compila los subdirectorios, organiza los archivos generados y crea el archivo multibootloaders.
2. Para limpiar los archivos generados:
make clean
Esto elimina los archivos y directorios generados durante la compilación.
Tags
Lenguaje ensamblador