.
Estos días he estado mirando el tema del Makefile, que me ha parecido bastante interesante.
Tengo un proyecto para Raspberry, que en principio iba a hacer con QT Creator, pero ya no lo tengo claro, porque algo que yo pensaba que estaría mascado, y me refiero a reproducir un video, parece que es mucho más complejo. Al final creo que usaré OpenMax IL para reproducir los videos, y aunque tengo un fuente y he conseguido un libro en PDF, es algo extremadamente enrevesado.
Total, que probablemente me lo curraré directamente en la RPY3, editando con Geeny (espero conseguir configurarle el Debug con GDB), y para compilar quiero hacerlo directamente con el Makefile o configurar Geeny para que haga lo mismo con make Makefile.
Encontré por Youtuble un cursillo acelerado de 6 capítulos, y aunque se quedan en lo básico, tengo pillados los conceptos. Bueno, al grano, en mi programa se leen el estado de 32 entradas usando un par de MCP23S17 por SPI, y se reproducen unos videos en función del estado de esas entradas y un fichero de configuración guardado en un Pendrive USB. Encontré un fuente prefabricado para el MCP23S17, que se lo trabaja muy bien, viene con su Makefile para compilarlo.
He abierto el Makefile y más o menos lo tengo claro, salvo en las lineas que usa el foreach. Este es el Makefile, entiendo que el foreach es como un bucle for, pero como en principio no hay nada definido en INCPATHS y LIBPATHS, no cazo como funciona, además esos TMP tampoco entiendo de donde salen.
PROJECT=mcp23s17
SOURCES=src/mcp23s17.c
LIBRARY=static
INCPATHS=
LIBPATHS=
LDFLAGS=
CFLAGS=-c -Wall
CC=gcc
# ------------ MAGIC BEGINS HERE -------------
# Automatic generation of some important lists
OBJECTS=$(SOURCES:.c=.o)
INCFLAGS=$(foreach TMP,$(INCPATHS),-I$(TMP))
LIBFLAGS=$(foreach TMP,$(LIBPATHS),-L$(TMP))
# Set up the output file names for the different output types
ifeq "$(LIBRARY)" "shared"
BINARY=lib$(PROJECT).so
LDFLAGS += -shared
else ifeq "$(LIBRARY)" "static"
BINARY=lib$(PROJECT).a
else
BINARY=$(PROJECT)
endif
all: $(SOURCES) $(BINARY)
$(BINARY): $(OBJECTS)
# Link the object files, or archive into a static library
ifeq "$(LIBRARY)" "static"
ar rcs $(BINARY) $(OBJECTS)
else
$(CC) $(LIBFLAGS) $(OBJECTS) $(LDFLAGS) -o $@
endif
.c.o:
$(CC) $(INCFLAGS) $(CFLAGS) -fPIC $< -o $@
distclean: clean
rm -f $(BINARY)
example: example.c
gcc -o example example.c -Isrc/ -L. -lmcp23s17
interrupt_example: interrupt_example.c
gcc -o interrupt_example interrupt_example.c -Isrc/ -L. -lmcp23s17
clean:
rm -f $(OBJECTS)
install: $(BINARY)
install src/mcp23s17.h /usr/local/include
install $(BINARY) /usr/local/lib