Je viens d'hériter du code C++ mal écrit avec un fichier cpp contenant la fonction principale et de nombreuses autres fonctions. Il existe également des fichiers .h
contenant les classes et leurs définitions de fonctions.
Jusqu'à présent, le programme était compilé à l'aide de la commande g++ main.cpp
. Maintenant que j'ai séparé les classes en fichiers .h
et .cpp
dois-je utiliser un fichier makefile ou puis-je quand même utiliser la commande g++ main.cpp
?
liste tous les autres fichiers cpp après main.cpp.
c'est à dire
g++ main.cpp other.cpp etc.cpp
etc.
Ou vous pouvez les compiler tous individuellement. Vous liez ensuite tous les fichiers ".o" résultants.
Pour compiler séparément sans lier, vous devez ajouter l’option -c
:
g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out
Maintenant que j'ai séparé les classes en fichiers .h et .cpp, dois-je utiliser un fichier makefile ou puis-je quand même utiliser la commande "g ++ main.cpp"?
Compiler plusieurs fichiers à la fois est un mauvais choix si vous voulez le mettre dans le Makefile.
Normalement dans un Makefile (pour GNU/Make ), il devrait suffire d’écrire ceci:
# "all" is name of the default target, running "make" without params would use it
all: executable1
# for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker
CC=$(CXX)
# tell which files should be used, .cpp -> .o make would do automatically
executable1: file1.o file2.o
De cette façon, make
recompilerait correctement uniquement ce qui doit être recompilé. On peut également ajouter quelques modifications pour générer les dépendances du fichier d'en-tête - afin que make reconstruise également correctement ce qui doit être reconstruit en raison des modifications apportées au fichier d'en-tête.
Vous pouvez toujours utiliser g ++ directement si vous voulez:
g++ f1.cpp f2.cpp main.cpp
où f1.cpp et f2.cpp sont les fichiers avec les fonctions qu'ils contiennent. Pour plus de détails sur l'utilisation de make pour la construction, voir l'excellent documentation de GNU make .
Je sais que cette question a été posée il y a des années mais je voulais toujours partager comment je compile habituellement plusieurs fichiers c ++.
g++ -c *.cpp -o myprogram
."myprogram"
./myprogram
c'est tout!!
La raison pour laquelle j'utilise * est que si vous avez 30 fichiers cpp, vous les taperiez tous? ou utilisez simplement le signe * et gagnez du temps :)
p.s Utilisez cette méthode uniquement si vous vous moquez de makefile.
Les fichiers .h
n'auront rien à voir avec la compilation ... vous ne vous souciez que des fichiers cpp ... alors tapez g++ filename1.cpp filename2.cpp main.cpp -o myprogram
signifie que vous compilez chaque fichier cpp et que vous les liez ensuite ensemble dans myprgram
.
puis lancez votre programme ./myprogram
Vous pouvez utiliser plusieurs commandes g ++, puis link, mais le plus simple est d'utiliser un Makefile traditionnel ou un autre système de construction: comme Scons (qui sont souvent plus faciles à configurer que les Makefiles).
J'avais l'habitude d'utiliser un Makefile personnalisé qui compilait tous les fichiers du répertoire en cours, mais je devais le copier dans tous les répertoires dont j'avais besoin, à chaque fois.
J'ai donc créé mon propre outil - niversal Compiler , ce qui a rendu le processus beaucoup plus facile lors de la compilation de nombreux fichiers.
Comme rebenvp a dit que j'ai utilisé:
g++ *.cpp -o output
Et puis cela pour la sortie:
./output
Mais une meilleure solution consiste à utiliser le fichier make
. Lisez ici pour en savoir plus sur les fichiers make
.
Assurez-vous également que vous avez ajouté les fichiers .h
requis dans les fichiers .cpp
.