Überschreiben von Argumenten in der Befehlszeile

8

Wenn ich in derselben Reihenfolge clang -O2 -O3 in derselben Befehlszeile gebe, wird die -O3 die -O2 überschreiben? Wird das spätere Argument immer überschrieben?
Ein Build-Skript, das ich nicht standardmäßig ändern kann, fügt -O2 hinzu und ich kann nur noch Dinge hinzufügen. Ist das eine akzeptable Sache?

    
shoosh 15.12.2015, 11:25
quelle

2 Antworten

7

Die Bedienung des Clang-Treibers ist in der Manual-Page Driver Design & amp; Internals § Treiberstufen . Beachten Sie, wie Sie die Option -### verwenden können, um das Ergebnis jeder Stufe auszugeben. Dies können Sie nicht mit Ihrem Borken-Build-System trainieren, da die Option zuerst aufgeführt werden muss. Aber Sie können bestätigen, dass der Treiber tatsächlich tut, was Sie hoffen, dass es tut:

%Vor%

Wo "Yada" ist spucken, dass ich weggelassen, da es zu viel davon ist. In der Tat ist die letzte -O -Option, die Sie angeben, diejenige, die effektiv ist. Welches ist das erwartete Verhalten für jeden Compilertreiber.

    
Hans Passant 31.12.2015, 10:44
quelle
5

clang verarbeitet Optionen von links nach rechts. Die letzte Option -O "gewinnt". Dies ist ein Feature genau aus dem Grund, warum Sie fragen: Es gibt also eine Möglichkeit, die von anderen gesetzten Standards zu überschreiben (zB ein Build-System, Software-Entwickler, ...) Ja, es ist absolut akzeptabel und Sie sind in guter Gesellschaft .

Die ultimative Referenz wäre der LLVM-Quellcode (Optionshandling) wird von cl::ParseCommandLineOptions() in der Datei lib/Support/CommandLine.cpp implementiert.)

Denken Sie über den Tellerrand: Auch wenn Sie das Buildskript nicht ändern können , können Sie beeinflussen, es zu tun, was Sie wollen. Zum Beispiel kann die Optimierungsoption Teil einer Variablen sein, die von einer Option oder von der Umgebung stammt. Wenn der Build beispielsweise Makefile verwendet, könnte die Variable CFLAGS oder COPTS heißen und mit

festgelegt werden %Vor%

Wenn der Build ein Shell-Skript verwendet, vielleicht etwas wie

%Vor%

würde funktionieren. Es gibt nichts zu sagen, ohne den Build zu sehen.

    
Jens 20.12.2015 12:08
quelle

Tags und Links