• [^] # Re: Notes

    Posté par (site web personnel) . En réponse au journal C11, listes variantes et le turfu. Évalué à 3.

    En fait les Makefiles bien écrits sont déjà auto-suffisant dès lors qu'on a pas trop besoin de portabilité et qu'on utilise gcc et clang, -MMD permet de générer des règles automatiques pour les entêtes. On peut donc avoir un Makefile qui recompile tous les fichiers y compris ceux avec dépendances indirectes.

    On peut par exemple avoir un Makefile tout à fait correct pour compiler un projet sans écrire aucune règle, cela est encore plus flagrant quand on a un nom d'exécutable du même nom du fichier.

    Avec GNU Make:

    SRCS = tetris.c board.c score.c
    OBJS = $(SRCS:.c=.o)
    DEPS = $(SRCS:.c=.d)
    override CPPFLAGS += -MMD
    .PHONY: all
    all: tetris
    tetris: $(OBJS)
    tetris: private LDFLAGS += -lncurses
    -include $(DEPS)
    .PHONY: clean
    clean:
     rm -f tetris $(OBJS) $(DEPS)
    

    Démonstration:

    # tetris.c inclue common.h
    $ make
    cc -MMD -c -o tetris.o tetris.c
    cc -MMD -c -o board.o board.c
    cc -MMD -c -o score.o score.c
    cc -lncurses tetris.o board.o score.o -o tetris
    $ touch common.h
    $ make
    cc -MMD -c -o tetris.o tetris.c
    cc -lncurses tetris.o board.o score.o -o tetris
    

    AI is a mental disorder