Je ne sais pas grand-chose sur la création de Makefiles, mais j'ai lu le make manual et j'ai fait quelques progrès. Mon Makefile fonctionne et fait ce que je veux.Comment pourrais-je améliorer ce Makefile?
Ma situation implique généralement entre 1 et 3 programmes différents doivent être compilés et envoyés à mon TA pour le marquage et tels via un formulaire Web. La structure de chaque application est 'prog.c', 'prog_lib.h' et 'prog_lib.c'. Dans le passé, j'ai créé des répertoires séparés pour chaque programme et créer des Makefiles séparés pour chaque répertoire pour construire le programme contenu dans. Je goudron alors chaque dossier et les soumets séparément. Récemment, les TA ont demandé que tous les fichiers sources soient dans un répertoire et un fichier Makefile avec les différentes cibles à construire pour que leurs applications de marquage puissent fonctionner sans aucune intervention humaine. Je me demandais comment quelqu'un de plus expérimenté améliorerait ce Makefile et comment ma situation en général est généralement résolue? Je voudrais réduire la quantité de frappe que je dois faire quand je passe à ma prochaine tâche et que je dois mettre à jour plusieurs endroits.
Voici mon Makefile:
ASSIGNMENT = 3
TARNAME = Assignment$(ASSIGNMENT).tar.bz2
CC = gcc
CFLAGS = -O2 -Wall -ansi -pedantic -W # I like warnings
LDFLAGS = -lm
DEBUG = -g # to resolve symbols in GDB and valgrind
FREQ_OUT = frequency_table
FREQ_SOURCES = frequency_table.c frequency_table_lib.c
FREQ_OBJECTS = frequency_table.o frequency_table_lib.o
DECODE_OUT = decode
DECODE_SOURCES = decode.c decode_lib.c
DECODE_OBJECTS = decode.o decode_lib.o
SOURCES = $(FREQ_SOURCES) $(DECODE_SOURCES)
OBJECTS = $(FREQ_OBJECTS) $(DECODE_OBJECTS)
OUT = $(FREQ_OUT) $(DECODE_OUT)
.PHONY: info
info:
@echo -e "make info\n" \
"\tmake all \t\t\tMake all targets\n" \
"\tmake frequency_table \t\tMakes frequency table\n" \
"\tmake decode \t\t\tMakes decode\n" \
"\tmake dist \t\t\tMakes tar archive of sources and Makefile\n" \
"\tmake clean \t\t\tRemoves all the object files and executables\n" \
"\tmake distclean \t\t\tPerforms clean and removes tar archive"
.PHONY: all
all: $(OUT)
$(FREQ_OUT): $(FREQ_OBJECTS)
$(CC) $(CFLAGS) $(DEBUG) $(LDFLAGS) $(FREQ_OBJECTS) -o [email protected]
$(DECODE_OUT): $(DECODE_OBJECTS)
$(CC) $(CFLAGS) $(DEBUG) $(LDFLAGS) $(DECODE_OBJECTS) -o [email protected]
.o:
$(CC) -c $(CFLAGS) -o [email protected] $<
.PHONY: dist
dist: $(SOURCES)
@echo "Creating tar archive. See $(TARNAME)"
tar cvjf $(TARNAME) $(SOURCES) $(wildcard *_lib.h) Makefile
.PHONY: clean
clean:
rm -f $(OUT) $(OBJECTS)
.PHONY: distclean
distclean: clean
rm -f $(TARNAME)
ne ressemble pas à "Je ne sais pas grand chose sur la création de Makefiles" à partir du code :) – Lazer