2016-07-24 32 views
0

ich zur Zeit aufrufen Klappern oder gcc alswenn nur eine Vorverarbeitung, das heißt gcc -E

cc -E -DPREPROCESSING ... 

wenn Makros debuggen.

Es ist mir aufgefallen, dass die Definition redundant ist. Gibt es einen Ausdruck, den ich in die Quelle schreiben könnte, um festzustellen, wann der Compiler nach der Vorverarbeitung stoppt, und diese Definition aus meinen Build-Skripten zu löschen?

#if magic 
#define PREPROCESSING 
#ending 

Ein Blick auf die Dokumente schlägt nicht vor, aber mit etwas Glück vermisse ich etwas.

+0

dies nicht sehr allgemein Wert hätte und Wanzen bauen einführen würde. Ein Build-System kann die Vorverarbeitung als separaten Schritt auswählen und den Compiler mehrmals aufrufen. Wenn dieses Feature vorhanden wäre, würde das Vorverarbeiten und dann das separate Kompilieren (beispielsweise zum Verbessern der plattformübergreifenden parallelen Erstellungsleistung) eine andere Ausgabe erzeugen als das Vorverarbeiten und Kompilieren in einer einzelnen Ausführung. Das wäre sehr überraschend und fehleranfällig. Wie würden Sie in diesem Fall vorkompilierte Header behandeln? –

Antwort

1

Welche Lösung Sie auch immer haben, wird compilerspezifisch sein, da der C-Standard nichts über separate Vorverarbeitung zu sagen hat.

In gcc, könnten Sie die Magie implementieren, indem Sie eine benutzerdefinierte Spec-Datei hinzufügen:

%rename cpp old_cpp 
*cpp: 
%{E:-DPREPROCESSING} %(old_cpp) 

Sie benötigen würde gcc zu sagen, diese Spec-Datei (-specs=/path/to/specfile) zu verwenden, wenn Sie Ihre eigene gcc mit dem oben zusammengestellt Definition hinzugefügt, um die integrierte cpp spec. Wenn Sie ein Makefile verwenden, können Sie die Option -specs oben zu Ihrem CFLAGS hinzufügen.

(Ich sollte hinzufügen, dass ich nicht glaube, dies eine besonders gute Idee ist. Aber es ist möglich .)

+0

Ich wusste nichts über spec-Dateien. Ich habe auf einen Fixpunkt gehofft und Sie haben einen allgemeinen Mechanismus bereitgestellt. Sehr gut danke –