2009-06-29

Mais Makefiles

Para aqueles que ainda não usam Makefiles (porque “dá muito trabalho”, porque “não sei fazer isso” ou porque “não vou perder tempo”) deixo aqui um template (mais ou menos) genérico para compilar pequenos programas em C.

Makefile
CONFIG=config.mk
DEPS=deps.mk
include $(CONFIG)

SRC_FILES=$(wildcard *.c)
HDR_FILES=$(wildcard *.h)
OBJ_FILES=$(patsubst %.c,%.o,$(SRC_FILES))
LDLIBS=$(patsubst %,-l%,$(LIBS))

$(TARGET) : $(OBJ_FILES)

all : $(TARGET)

clean :
$(RM) *.o *~

clobber : clean
$(RM) $(TARGET) $(DEPS)

rebuild : clobber $(DEPS) $(TARGET)

$(DEPS) : $(SRC_FILES) $(HDR_FILES)
$(CC) -MM $(SRC_FILES) > $(DEPS)

include $(DEPS)
config.mk
# The name of the compiled program
#TARGET=program
TARGET=

# The flags to use when compiling
#CFLAGS=-g -Wall
CFLAGS=-Wall

# The libs to link with
#LIBS=gl readline
LIBS=

O primeiro ficheiro (Makefile) fica tal e qual como está porque contém as definições básicas comuns. O segundo (config.mk) serve para configurar opções que mudam de projecto para projecto: o nome do executável (TARGET), as flags do compilador (CFLAGS) e as bibliotecas para linkar (LIBS).

Basta colocar estes dois ficheiros na pasta onde têm o código fonte e depois:

$ make

Já está. As dependências (deps.mk) são geradas automaticamente pelo pré-processador.

Também existem outros targets:

$ make clean
Apaga todos os ficheiros intermédios da compilação.
$ make clobber
Apaga todos os ficheiros intermédios, o executável compilado e o ficheiro das dependências.
$ make rebuild
Força a compilação de todos os ficheiros, independentemente de terem sido modificados ou não.

Agora já não têm desculpa :P.

3 commentários:

Francisco Soares de Moura disse...

Para quem percebe tanto só tirou 13?

Martinho Fernandes disse...

Agora não sei se deva ficar honrado pelo professor se ter dado ao trabalho de comentar aqui ou ofendido por alguém achar esta brincadeira engraçada.

Anónimo disse...

tirou 13 mas pelo menos tenta explicar e na minha opiniao bem aquilo que faz o que nos permite ter uma compreensao melhor dos programas, coisa que o senhor nunca se da ao trabalho de fazer, por isso e que tanta gente reprova a disciplina

Enviar um comentário