2010-09-02 2 views
0

J'ai ce Makefile et chaque ligne fonctionnent séparément OK, mais quand je fais make je reçois cette erreur:problème avec mon makefile

make: *** No rule to make target `CoalitionManipulation‬‬.cpp', needed by `CoalitionManipulation‬‬.o'. Stop. 

Mais je peux voir le fichier CoalitionManipulation.o, cela signifie qu'il existe! Bere est le makefile:

CoalitionManipulation‬‬ : ‫‪CoalitionManipulation‬‬‬‬.o PrintQ3.o ChooseRandomBit.o 
    g++ -Wall -lm PrintQ3.o ChooseRandomBit.o CoalitionManipulation.o -o ‫‪CoalitionManipulation‬‬ 

CoalitionManipulation‬‬.o : CoalitionManipulation‬‬.cpp ChooseRandomBit.h PrintQ3.h 
    g++ -Wall -c CoalitionManipulation.cpp -o CoalitionManipulation‬‬.o 

PrintQ3.o : PrintQ3.h PrintQ3.cpp 
    g++ -Wall -c PrintQ3.cpp -o PrintQ3.o 

ChooseRandomBit.o : ChooseRandomBit.cpp ChooseRandomBit.h 
    g++ -Wall -c ChooseRandomBit.cpp -o ChooseRandomBit.o 

Quel est le problème?

Répondre

3
make: *** No rule to make target `CoalitionManipulation‬‬.cpp', needed by `CoalitionManipulation‬‬.o'. Stop. 

Marque ne peut pas trouver CoalitionManipulation.cpp. Est-ce là où vous avez dit que c'est fait?

+0

tous mes fichiers sont au même endroit, y compris le Makefile –

3

Si vous utilisez gmake (ce qui est probable), vous pouvez définir CXXFLAGS comme étant -Wall et ignorer la plupart des règles .o (Make sait quoi faire avec un fichier .cpp). Vous pouvez réellement laisser la règle vide, mais toujours spécifier les dépendances d'en-tête sans problème.

EDIT: c'est une erreur plutôt différente de ce qu'il y avait au début ... essayez ce qui précède et voyez si cela fonctionne.

Essayez quelque chose comme

CXXFLAGS=-Wall 
CoalitionManipulation‬‬ : ‫‪CoalitionManipulation‬‬‬‬.o PrintQ3.o ChooseRandomBit.o 
    g++ -Wall -lm $^ -o [email protected] 

CoalitionManipulation‬‬.o : CoalitionManipulation‬‬.cpp ChooseRandomBit.h PrintQ3.h 
PrintQ3.o : PrintQ3.h PrintQ3.cpp 
ChooseRandomBit.o : ChooseRandomBit.cpp ChooseRandomBit.h 

clean: 
    rm *.o CoalitionManipulation 

La variable spéciale $^étend à la liste des pré-requis, $ @ s'étend au nom de la cible. Un peu plus loin, le générateur de makefile automatique va également vous fournir des indications sur les bibliothèques à utiliser, en utilisant LDLIBS. Secondairement, make assumera le fichier .cpp à la fois pour l'étape de liaison finale et les étapes au milieu.

CXXFLAGS=-Wall 
LDLIBS=-lm 
CoalitionManipulation‬‬: PrintQ3.o ChooseRandomBit.o 
CoalitionManipulation‬‬.o: ChooseRandomBit.h PrintQ3.h 
PrintQ3.o: PrintQ3.h 
ChooseRandomBit.o: ChooseRandomBit.h