Präprozessor-Angaben aus cc-Datei entfernen
-
Hallo,
ich habe hier eine Datei mit C++-Quellen und möchte, dass sie soweit kompiliert wird, dass ich keinerlei Präprozessor-Direktiven mehr drin zu stehen habe.
Mit dem Unix-Programm "gcc -save-temps pdftotext.cc" weden schonmal alle #include und #define-Direktiven aufgelöst und die entsprechenden Header-Dateien eingefügt. Die resultierende Datei "pdftotext.ii" enthält aber komischerweise noch Angaben wie:
# 1 "pdftotext.cc" # 1 "<eingebaut>" # 1 "<Kommandozeile>" ... # 9 "pdftotext.cc" # 1 "./aconf.h" 1 ... # 331 "/usr/include/features.h" 3 4 # 1 "/usr/include/gnu/stubs.h" 1 3 4 # 332 "/usr/include/features.h" 2 3 4 # 29 "/usr/include/stdio.h" 2 3 4Und das verteilt in der ganzen Datei!
Weiß jemand, wie ich die Quellen komplett von Lattenzäunden (#) befreie, ohne Funktionalität einzubüßen
?Danke im Voraus,
Rapthor
-
-
Nachdem Du Deine Datei mittels 'cpp input.cpp output.temp' prozessiert hast, kannst Du die '#' Zeilen mit
'grep -v "^#" output.temp > output.ii' saeubern. Bei einem kleinen Test hier waren die entsprechenden Zeilen fuer g++ nicht notwendig.
-
tim_g schrieb:
Nachdem Du Deine Datei mittels 'cpp input.cpp output.temp' prozessiert hast, kannst Du die '#' Zeilen mit
'grep -v "^#" output.temp > output.ii' saeubern. Bei einem kleinen Test hier waren die entsprechenden Zeilen fuer g++ nicht notwendig.Blöderweise wird eine Header-Datei beim Ausführen des Befehls "cpp input.cpp output.temp" nicht gefunden. Obwohl diese sich im gleichen Verzeichnis befindet.
"cpp -B . input.cpp output.temp" funktioniert da auch nicht; ich dachte die Angabe des Arbeitsverzeichnisses müste ausreichen.
-
header.h:
class Foo { int a, b; public: Foo(){}; };test.cpp:
#include <iostream> #include <string> #include "header.h" #define PI 42 int main() { std::string pi ("PI"); Foo f(); std::cout << "PI = " << pi << std::endl; }cpp:
cpp test.cpp test.iifunktioniert hier (Debian) ohne Probleme. Unter welchem System arbeitest Du? Hast Du die lokalen header mit "..." oder <...> umschlossen?
-
tim_g schrieb:
Hast Du die lokalen header mit "..." oder <...> umschlossen?
Daran lag's! Ich hatte fälschlicherweise "<..>" verwendet. Danke!
-
Die zusätzlichen Direktiven sind übrigens dafür da, dass der Compiler später noch sagen kann "Fehler in test.cpp:12" statt "Fehler in /tmp/gcccx45ae:12342"
