2010-11-18 13 views
30

Ich habe eine extern bereitgestellte CPP-Datei. Es ist eine Mischung aus C-kompatiblem Code und ein bisschen C++. Der C++ - Code ist nur ein Wrapper um das C, um die C++ - Funktionen zu nutzen.Erzwingen gcc zum kompilieren von .cpp-Datei als C

Es verwendet #ifdef __cplusplus Makros, um den C++ - Code zu schützen, was großartig ist. Leider, wenn ich versuche, mit gcc zu kompilieren, behandelt es es als C++ wegen der Dateiendung. Ich bin mir der Unterschiede zwischen gcc und g ++ bewusst - ich möchte nicht als C++ kompilieren.

Gibt es eine Möglichkeit, gcc zu zwingen, diese Datei als eine C-Datei zu behandeln? Ich habe versucht, z.B. --std=c99, aber dies erzeugt korrekt den Fehler, dass C99 nicht für C++ gültig ist.

Das Umbenennen der Datei zu .c funktioniert, aber ich möchte dies vermeiden, wenn es möglich ist, weil es extern zur Verfügung gestellt wird, und es wäre schön, dass es als eine ursprüngliche Kopie bleibt.

Danke!

+0

Manchmal wenn ich SO Fragen sehe. Ich möchte nur ein großes RTFM schreien !! 'Mann gcc'. Für diesen König der Frage braucht es tatsächlich weniger Zeit als die Frage zu schreiben. – log0

+17

Ich hatte das gleiche Problem, weil ich reinen C-Code innerhalb einer .cpp-Datei kompilieren wollte ... offensichtlich bin ich ein ziemlich Anfänger in Bezug auf C. RTFM! ist dann nicht so ein guter Rat. GCC-Manpages sind 11.000 Zeilen und es ist ziemlich schwierig, dort eine Lösung zu finden, wenn Sie nicht wissen, wonach Sie suchen sollen. – mort

Antwort

51

Die -x Option gcc können Sie die Sprache aller Eingabedateien folgende es an:

$ gcc -x c your-file-name.cpp 

Wenn Sie nur auf einen speziellen Fall, dass eine Datei, Sie -x none verwenden können, die besondere Behandlung abzusperren :

$ gcc -x c your-filename.cpp -x none other-file-name.cpp 

(your-filename.cpp wird als C kompiliert werden, während other-file-name.cpp die Erweiterung verwenden und kompilieren wie C++)

+1

Wie peinlich, ich muss direkt vorbeigeschaut haben! Vielen Dank, genauso wie an alle anderen, die geantwortet haben. – ralight

10

Um foo.cpp als C-Datei zu kompilieren, Sie eine neue Datei foo.c und setzen Sie die folgenden als ihr gesamter Inhalt benannt erstellen:

#include "foo.cpp" 
Jetzt foo.c

kompilieren statt foo.cpp.

Wir verwendet haben diese in die andere Richtung zu gehen (kompiliert eine .c Datei als C++), um unter Verwendung von C++ Funktionen in einigen Dateien zu starten, während ihre zehnjährige CVS Geschichte zu bewahren. Außerdem haben wir den nativen Compiler der einzelnen Plattformen erstellt, nicht nur GCC, sodass wir den entsprechenden Befehl für ein halbes Dutzend Compiler nicht finden mussten und unser Buildsystem dann nur auf bestimmte Dateien anwenden musste.

+0

Funktioniert als Charme und am schnellsten erwähnte Lösung möglich, denke ich. – Mischo5500

Verwandte Themen