it-swarm.com.de

Kompilieren mehrerer CPP- und H-Dateien mit G ++

Ich habe gerade einen C++ - Code geerbt, der schlecht mit einer cpp-Datei geschrieben wurde, die die Haupt- und eine Reihe anderer Funktionen enthielt. Es gibt auch .h - Dateien, die Klassen und ihre Funktionsdefinitionen enthalten.

Bisher wurde das Programm mit dem Befehl g++ main.cpp Kompiliert. Muss ich ein Makefile verwenden, nachdem ich die Klassen in .h Und .cpp Dateien getrennt habe, oder kann ich trotzdem den Befehl g++ main.cpp Verwenden?

142
Meir

liste alle anderen cpp dateien nach main.cpp auf.

dh

g++ main.cpp other.cpp etc.cpp

und so weiter.

Oder Sie können sie alle einzeln zusammenstellen. Anschließend verknüpfen Sie alle resultierenden ".o" -Dateien miteinander.

189
Goz

Um ohne Verknüpfung separat zu kompilieren, müssen Sie die Option -c Hinzufügen:

g++ -c myclass.cpp
g++ -c main.cpp
g++ myclass.o main.o
./a.out
44
FredAKA

Muss ich nach der Trennung der Klassen in .h- und .cpp-Dateien ein Makefile verwenden oder kann ich trotzdem den Befehl "g ++ main.cpp" verwenden?

Das gleichzeitige Kompilieren mehrerer Dateien ist eine schlechte Wahl, wenn Sie diese in das Makefile einfügen möchten.

Normalerweise sollte es in einem Makefile (für GNU/Make ) ausreichen, folgendes zu schreiben:

# "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

Auf diese Weise würde make nur das neu kompilieren, was neu kompiliert werden muss. Man kann auch ein paar Optimierungen hinzufügen, um die Header-Datei-Abhängigkeiten zu erzeugen - so dass make auch das, was aufgrund der Header-Datei-Änderungen neu erstellt werden muss, korrekt wiederherstellt.

20
Dummy00001

Sie können g ++ weiterhin direkt verwenden, wenn Sie möchten:

g++ f1.cpp f2.cpp main.cpp

dabei sind f1.cpp und f2.cpp die Dateien mit den darin enthaltenen Funktionen. Einzelheiten zur Verwendung von make für den Build finden Sie in der excellent GNU make-Dokumentation .

10
anon

Ich weiß, dass diese Frage vor Jahren gestellt wurde, wollte aber dennoch mitteilen, wie ich normalerweise mehrere C++ - Dateien kompiliere.

  1. Angenommen, Sie haben 5 cpp-Dateien. Sie müssen lediglich das * verwenden, anstatt den Namen der einzelnen cpp-Dateien einzugeben. Z. B. g++ -c *.cpp -o myprogram.
  2. Dies erzeugt "myprogram"
  3. starte das Programm ./myprogram

das ist alles!!

Der Grund, warum ich * benutze, ist, dass Sie bei 30 cpp-Dateien alle eingeben würden. oder benutze einfach das * -Zeichen und spare Zeit :)

ps Verwenden Sie diese Methode nur, wenn Sie Makefile nicht interessieren.

6
zobair

.h - Dateien haben nichts mit Kompilieren zu tun ... Sie interessieren sich nur für CPP-Dateien ... Geben Sie also g++ filename1.cpp filename2.cpp main.cpp -o myprogram Ein.

bedeutet, dass Sie alle cpp-Dateien kompilieren und sie dann zu myprgram verknüpfen.

dann starte dein Programm ./myprogram

5
Matthew

Sie können mehrere g ++ - Befehle verwenden und dann verknüpfen. Am einfachsten ist es jedoch, ein traditionelles Makefile oder ein anderes Build-System zu verwenden: Scons (die häufig einfacher einzurichten sind als Makefiles).

4
gauteh

Früher verwendete ich ein benutzerdefiniertes Makefile, das alle Dateien im aktuellen Verzeichnis kompilierte, aber ich musste es jedes Mal in jedes Verzeichnis kopieren, das ich brauchte.

Deshalb habe ich mein eigenes Tool - niversal Compiler erstellt, das das Kompilieren vieler Dateien erheblich vereinfacht.

1

Als rebenvp sagte ich:

g++ *.cpp -o output

Und dann mach das für die Ausgabe:

./output

Eine bessere Lösung ist jedoch die Verwendung der Datei make. Lesen Sie hier , um mehr über make -Dateien zu erfahren.

Stellen Sie außerdem sicher, dass Sie die erforderlichen .h - Dateien zu den .cpp - Dateien hinzugefügt haben.

1
Pritam Banerjee