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?
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:
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.
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
Wenn der Build ein Shell-Skript verwendet, vielleicht etwas wie
%Vor%würde funktionieren. Es gibt nichts zu sagen, ohne den Build zu sehen.
Tags und Links clang command-line