2010-05-11 2 views
1

Voici un fichier d'en-tête simple pour six programmes différents. Ce Makefile fonctionnait très bien, mais j'ai ensuite changé les programmes pour inclure d'autres fichiers d'implémentation. Ce fichier Makefile doit être modifié de sorte que si les fichiers d'implémentation changent, les fichiers contenant ces fichiers d'implémentation soient recompilés.Comment ajouter des dépendances à ce fichier d'en-tête

all: load list show add delete btree 
%: %.cpp 
    g++ $< -g -o [email protected] 

Répondre

2

Vous pouvez utiliser l'option -MM de gcc pour créer des fichiers de dépendance, puis les inclure dans votre Makefile.

TARGETS = load list show add delete btree 
all: $(TARGETS) 
%: %.cpp 
    g++ $< -g -o [email protected] -MM -MF [email protected] 
    sed "s/[email protected]\.o:/[email protected]:/" [email protected] > [email protected] 
    [email protected] [email protected] 

DEPS=$(TARGETS:%=%.d) 
-include $(DEPS) 

La ligne sed est présent pour changer le fichier de dépendance load.o: load.c-load: load.c.

+0

Lorsque je fais g ++ -MM list.cpp, j'obtiens la sortie suivante: list.o: list.cpp bt.h insert.c btio.c btutil.c Lab2.cpp. Qu'est-ce que je suis censé faire avec ça? Cela ne crée rien. – neuromancer

+0

Vous n'avez pas besoin de l'exécuter directement - la règle%:% .cpp le fait. La règle convertit cette ligne en un ensemble de fichiers .d qui sont ensuite inclus dans le fichier makefile. – Mark

+0

'-MM' génère cette sortie, et' -MF' la redirige dans un fichier (se terminant par .dd). La ligne suivante exécute 'sed' pour modifier légèrement, et le renommer en' .d'. Ces derniers fichiers '.d' sont inclus dans le Makefile, et indiquent à quel fichier dépend quel autre. –

Questions connexes