2016-09-09 2 views
0

nehme an, ich habe dies:Gibt es eine Möglichkeit, Code über die Befehlszeile eines Compilers voranzustellen?

int main() { return a; } 

und ich möchte den Compiler aufzurufen und sie haben kompilieren:

g++ a.cpp --PREPEND-CODE-FLAG="int a = 5;"

ist es eine Möglichkeit, dies zu tun?

Bitte beachte, dass ich weiß, ich kann für a über die Befehlszeile ein Präprozessordefinition einfügen, aber ich bin auf der Suche nach einer Möglichkeit, realen C++ Code der aktuellen Übersetzungseinheit vorangestellt wird.

zur Zeit bin ich Erzeugen eines separaten Header mit diesem Code und ich bin auch mit der -I Flagge für g ++/Klirren

+1

Es gibt keine „aktuelle Übersetzungseinheit“, wie Sie – Drop

+3

mehrere Dateien auf einen Aufruf von Compiler passieren kann Was ist der Anwendungsfall für das? –

+0

@Ben vertrau mir - da ist einer. Ich versuche, [this] (https://github.com/google/googletest/blob/master/googletest/docs/V1_7_Primer.md#important-note-for-visual-c-users) Problem für [meine] zu bekämpfen Bibliothek] (https://github.com/onqtam/doctest) durch das Build-System (beachten Sie, dass es nicht nur für Visual Studio - es betrifft alle Plattformen und Compiler). Ich möchte eine unaufdringliche Möglichkeit für die Kraft-Verknüpfung jeder Objektdatei einer statischen Bibliothek in die endgültige DLL/ausführbare Datei - und ich möchte es in cmake codiert. – onqtam

Antwort

3

Sie mit Tags versehen haben diese Frage mit mehreren Tags zu verschiedenen C++ betreffen Implementierungen, was darauf hindeutet dass Sie nach einer plattformübergreifenden Lösung suchen. Keine existiert.

Der Standard gibt nicht an, wie eine Übersetzungseinheit an den Compiler übergeben wird; Es wird niemals angenommen, dass eine Übersetzungseinheit beispielsweise eine einzelne Datei ist. Wenn Sie g++ mit einem Standard-Shell verwenden, könnten Sie zum Beispiel einer Übersetzungseinheit aus der Ausführung von mehreren Befehlen zusammensetzen:

{ 
    echo 'int a = 5'; 
    echo '#line 1 a.cpp' 
    cat a.cpp 
} | g++ -Wall -x c++ - 

, das funktioniert (mit geringfügigen Variationen) mit dem meisten C++ Compiler auf einem Unix Plattform, ist aber offensichtlich nicht für eine Windows-Plattform geeignet. Vielleicht wären andere Dinge. Aber welche Lösung Sie auch verwenden, wird individuell für die Umgebung erstellt, in der Sie arbeiten.

+0

Ich akzeptiere das, weil ... wie ich vermutete, was ich suche nicht existiert. – onqtam

0
$ g++ -DPREPENDED_CODE="int a = 5;" nod.cpp 
$ ./a.out 
$ echo $? 
5 
$ 

wo nod.cpp ist:

PREPENDED_CODE 

int main() 
{ 
    return a; 
} 
Verwandte Themen