2016-12-09 1 views
3

J'apprenais à connaître l'outil makefile qui semble très puissant, et j'essayais de comprendre comment le faire fonctionner puisque j'ai 4 lignes principales différentes et une classe commune pour 3 d'entre elles.C++ - Compilation de plusieurs fichiers

Ce que je voudrais faire est:

linéaire: g++ -o linear linear.cpp

Linear5: g++ -o linear5 linear5.cpp Contenidor.cpp Contenidor.h

logarithmiques: g++ -o logarithmic logarithmic.cpp Contenidor.cpp Contenidor.h

Constant: g++ -o constant constant.cpp Contenidor.cpp Contenidor.h

Avec le code suivant Makefile :

all: linear5 linear logarithmic constant 

linear5: linear5.o 
    g++ -o linear5 linear5.o 

linear5.o: linear5.cpp 
    g++ -cpp linear5.cpp 

Contenidor.o: Contenidor.cpp 
    g++ -cpp Contenidor.cpp 

linear: linear.o Contenidor.o 
    g++ -o linear linear.o Contenidor.o 

linear.o: linear.cpp 
    g++ -cpp linear.cpp 

logarithmic: logarithmic.o Contenidor.o 
    g++ -o logarithmic logarithmic.o Contenidor.o 

logarithmic.o: logarithmic.cpp 
    g++ -cpp logarithmic.cpp 

constant: constant.o Contenidor.o 
    g++ -std=gnu++0x -o constant constant.o Contenidor.o 

constant.o: constant.cpp 
    g++ -cpp constant.cpp 

clean: 
    rm *.o 

Mais une erreur apparaît lorsque je tente d'exécuter la commande make:

g++ -cpp linear5.cpp 
g++ -o linear5 linear5.o 
g++: linear5.o: No such file or directory 
g++: no input files 

Répondre

4

Le problème est dans la façon dont vous effectuez la compilation en deux étapes: vous devez changer tous les cas de

file.o: file.cpp 
    g++ -cpp file.cpp 

dans:

file.o: file.cpp 
    g++ -c -o file.o file.cpp 

de cette façon, vous dites g ++ pour compiler simplement (-c) et ne liez pas votre fichier; la sortie sera un fichier objet, vous devez quand même spécifier son nom avec -o.

Ensuite, le fichier objet peut être utilisé dans les étapes suivantes.

+0

J'ai déjà changé mon code! Apprécier ton aide! ^^ – magalenyo