2009-11-18 22 views
5

Wie kompiliere ich meine C++ - Programme in Cygwin. Ich habe gcc installiert. Welchen Befehl soll ich verwenden? Wie führe ich meine Konsolenanwendung aus, wenn sie sich in einer .cpp-Erweiterung befindet? Ich versuche, C++ mit einigen kleinen Programmen zu lernen, aber in Visual C++ möchte ich kein separates Projekt für jede kleine .cpp-Datei erstellen müssen.Kompilieren von C++ mit Cygwin

Antwort

12

Sie benötigen einen Befehl verwenden wie:

g++ -o prog prog.cpp 

, dass eine einfache Form ist, die eine Eins-Datei C++ Projekt in eine ausführbare schaltet. Wenn Sie mehrere C++ Dateien haben, können Sie tun:

g++ -o prog prog.cpp part2.cpp part3.cpp 

aber schließlich werden Sie wollen Makefiles für Bequemlichkeit einzuführen, so dass Sie nur die Bits kompilieren, die sich geändert haben. Dann werden Sie mit einem Ende Makefile wie:

prog: prog.o part2.o part3.o 
    g++ -o prog prog.o part2.o part3.o 

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

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

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

Und dann, beginnen Sie herauszufinden, wie Sie Ihre Makefiles zu schreiben, um sie flexibler (wie nicht eine separate Regel für jede C++ Datei benötigen), aber das kann für eine andere Frage gelassen werden.

In Bezug auf ein separates Projekt für jede C++ - Datei ist das überhaupt nicht notwendig. Wenn Sie sie alle in einem Verzeichnis habe und es gibt eine einfache Zuordnung von C++ Dateien in ausführbaren Dateien, können Sie die folgende Make-Datei verwenden:

SRCS=$(wildcard *.cpp) 
EXES=$(SRCS:.cpp=.exe) 

all: $(EXES) 

%.exe: %.cpp 
    g++ -o [email protected] $^ 

dann den make Befehl ausführen und es wird (intelligent) erstellen, um alle Ihre ausführbare Dateien. [email protected] ist das Ziel und $^ ist die Liste der Voraussetzungen.

Und wenn Sie kompliziertere Regeln haben, heften Sie sie einfach unten an. Besondere Vorschriften wird bevorzugt auf die Musterregeln ausgewählt werden:

SRCS=$(wildcard *.cpp) 
EXES=$(SRCS:.cpp=.exe) 

all: $(EXES) 

%.exe: %.cpp 
    g++ -o [email protected] $^ 

xx.exe: xx.cpp xx2.cpp xx3.cpp 
    g++ -o [email protected] $^ 
    echo Made with special rule. 
+0

Danke. Kann ich jedoch ein einzelnes Makefile erstellen, das eine C++ - Datei im selben Verzeichnis kompiliert, anstatt ein Makefile für jede spezifische CPP-Datei zu erstellen? –

+0

Was ist die Erweiterung? .machen? Oder keine Erweiterung wie myMakefile –

+0

@Mohit, diese Makefiles kompilieren jede CPP-Datei zu ihrer äquivalenten exe (der Platzhalter und das '%' -Muster sehen das). Per Konvention wird die Make-Datei als Makefile oder Makefile bezeichnet. Sie können einen anderen Namen wie bob.mk verwenden, aber dann müssen Sie "make -f bob.mk all" machen und nicht nur "make all". – paxdiablo

4

Sie benötigen g ++. Dann versuchen Sie g++ file.cpp -o file.exe als Start. Später können Sie viel tippen vermeiden, indem Sie etwas über Makefiles lernen.

0

wenn Sie verwenden möchten, Cygwin Sie die normale gcc Syntax

g++ -o foobar foobar.cpp 

verwenden sollten, aber das nicht wirklich gut spielen mit Visual C++ . Ich rate Ihnen, einen Blick in Eclipse CDT zu werfen, wenn Sie GCC gegenüber dem visuellen C++ - Compiler bevorzugen.

0

Was ich tun, um eine CPP-Programm zu kompilieren:

g++ -Wall Test.cpp -o Test 
-Wall enables warning and error messages to be shown 
-o Test creates an Test.exe after compilation 

Wenn Sie Dateien separat kompilieren wollen:

g++ -Wall -c File1.cpp 
g++ -Wall -c File2.cpp 

nun eine ausführbare Datei mit den kombinierten Objektdateien als erstellen:

g++ -Wall File1.o File2.o -o File.exe 

Auf diese Weise können Sie Ihre Header-Dateien kompilieren und Sie können in Ihren Anwendungsprogrammen enthalten.

Verwandte Themen