2010-12-10 6 views
0

Ich versuche, boost.wave als Präprozessor anstelle des Präprozessors, der mit dem Compiler kommt. Ich bin nicht imstande herauszufinden, wie ich das erreichen kann.Wie kann ich boost.wave als Präprozessor verwenden cmake

Ich benutze CMake als Build-System-Generator und wie kann ich meinen Preprozessor boost.wave angeben. Dies sollte sowohl auf Windows (MSVC) als auch auf Linux (gcc) funktionieren.

googeln und suchen Stack-Überlauf-Archiven brachte keine Antwort


Compiler ohnehin Vorprozess der Datei. Es sieht also so aus, als wären hier zwei Schritte der Vorverarbeitung beteiligt.

Antwort

2

Dies ist ein zweistufiger Prozess.

Zuerst müssen Sie CMake anweisen, Wave als benutzerdefinierten Befehl zu verwenden: Verwenden Sie CMake add_custom_command. Sobald Sie diesen Befehl definiert haben, wird er aufgerufen, sobald die Abhängigkeiten, die Sie für den benutzerdefinierten Befehl angegeben haben, übereinstimmen.

Zweitens müssen Sie alle vordefinierten Makros und die (System-) Include-Pfade herausfinden, die Ihr Compiler normalerweise verwendet. Wave weiß nichts über einen bestimmten Compiler. Um eine Datei für einen bestimmten Compiler richtig vorzuverarbeiten, müssen daher alle (relevanten) vordefinierten Makros (die normalerweise vom Compiler vordefiniert sind) und alle System-Include-Pfade (die dem Compiler standardmäßig bekannt sind) beim Aufruf übergeben werden Welle. Wenn Sie all diese Optionen in die Befehlszeile von Wave einfügen, ist das zu mühsam (und wahrscheinlich ist es das), Sie können ein options file für Wave erstellen (fügen Sie es zur Befehlszeile mit @cfgfile hinzu). Hier ein Beispiel für MSVC 2005:

-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\include 
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include 
-D_MT 
-D_MSC_VER=1400 
-D_MSC_FULL_VER=140050727 
-D_MSC_EXTENSIONS 
-D_M_IX86 

Natürlich können Sie hier auch andere Optionen für Wave hinzufügen. Verschiedene Konfigurationsdateien für verschiedene Compiler sollten die Verwaltung in CMake vereinfachen.