Vous avez obtenu quelques réponses, et la plupart d'entre elles sont correctes, mais elles passent à côté de ce qui (je pense) est probablement le point essentiel ici.
Je pense que vous avez un makefile que vous essayez d'utiliser pour créer un exécutable. Au cas où vous ne seriez pas familier avec eux, les makefiles listent les dépendances entre les fichiers. Pour un cas vraiment simple, il pourrait avoir quelque chose comme :
myprogram.exe: myprogram.o
$(CC) -o myprogram.exe myprogram.o
myprogram.o: myprogram.cpp
$(CC) -c myprogram.cpp
La première ligne dit que myprogram.exe
dépend de myprogram.o
. La deuxième ligne indique comment créer myprogram.exe
de myprogram.o
. Les troisième et quatrième lignes disent myprogram.o
dépend de myprogram.cpp
et comment créer myprogram.o
de monprogramme.cpp` respectivement.
Je pense que dans votre cas, vous avez un makefile comme celui ci-dessus qui a été créé pour gcc. Le problème que vous rencontrez est que vous l'utilisez avec MS VC au lieu de gcc. Il se trouve que MS VC utilise ".obj" comme extension pour ses fichiers objets au lieu de ".o".
Cela signifie que lorsque make (ou son équivalent intégré dans l'IDE dans votre cas) essaie de construire le programme, il regarde ces lignes pour essayer de comprendre comment construire myprogram.exe
. Pour ce faire, il voit qu'il doit construire myprogram.o
donc il cherche la règle qui lui indique comment construire myprogram.o
. Cela dit qu'il doit compiler le fichier .cpp, donc il le fait.
Ensuite, les choses s'effondrent : le compilateur VC++ produit myprogram.obj
au lieu de myprogram.o
en tant que fichier objet, donc quand il essaie de passer à l'étape suivante pour produire myprogram.exe
de myprogram.o
elle constate que sa tentative de créer myprogram.o
a tout simplement échoué. Il a fait ce que la règle disait de faire, mais ça n'a pas produit myprogram.o
comme promis. Il ne sait pas quoi faire, alors il s'arrête et vous donne un message d'erreur.
Le remède à cela spécifique Le problème est probablement assez simple : modifiez le fichier make pour que tous les fichiers objets aient une extension de .obj
au lieu de .o
. On peut toutefois se demander si cela va tout régler - cela peut être tout ce dont vous avez besoin, ou cela peut simplement conduire à d'autres problèmes (probablement plus difficiles).
3 votes
Tout d'abord, un fichier '.o' est une étape intermédiaire entre la compilation et la liaison. S'il y a des erreurs de compilation, VS 2008 ne générera pas de fichier '.o', mais continuera à essayer de construire l'application, échouant après l'étape de liaison. En cas d'agitation, vous pouvez toujours essayer de "Reconstruire tout" ; cependant, je recommande de rechercher dans les journaux d'erreurs les fichiers objets manquants.