Wenn ich -O2 -O3
in derselben Befehlszeile in dieser Reihenfolge 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 Dinge danach hinzufügen. Ist das eine akzeptable Sache?Überschreiben von Argumenten in der Befehlszeile
Antwort
Der Betrieb des Clang-Treibers wird in der Handbuchseite Driver Design & Internals § Driver stages beschrieben. 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 überprüfen, ob der Fahrer tatsächlich tut, was Sie hoffen, dass es funktioniert:
clang -### foo.cpp -O2 -O3 # dumps yayayada "-O3" yadamore
clang -### foo.cpp -O3 -O2 # dumps yayayada "-O2" yadamore
Wo „bla“ wird spucken, dass ich weggelassen, da es zu viel 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. Somit gewinnt die letzte -O
Option "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 die LLVM Quellcode sein (Option Handhabung wird durch cl::ParseCommandLineOptions()
in Datei lib/Support/CommandLine.cpp
implementiert.)
Denken außerhalb der Box: auch wenn Sie nicht Änderung das Build-Skript, können Sie Einfluss 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 zum Beispiel der Bau eines Makefile
verwendet, könnte die Variable CFLAGS
oder COPTS
und eingestellt werden, mit
make CFLAGS=-O3
aufgerufen werden, wenn der Build ein Shell-Skript verwendet, vielleicht so etwas wie
CFLAGS="-O3" ./configure
funktionieren würde. Es ist nicht zu sagen, ohne den Build zu sehen.
- 1. Übergabe Array von Argumenten in der Befehlszeile
- 2. Makro von der Befehlszeile überschreiben
- 3. Übergeben von Argumenten von der Befehlszeile in ein tcl-Skript
- 4. Spring: überschreiben eine application.property von der Befehlszeile
- 5. Wie behandelt Getopt :: Std Leerzeichen in Argumenten auf der Befehlszeile?
- 6. Zielframework über die Befehlszeile überschreiben
- 7. Wie kann ich die .hgrc-Optionen in der Befehlszeile überschreiben?
- 8. So überschreiben Sie die Shake-Konfiguration in der Befehlszeile
- 9. Wie Maven-Eigenschaft in der Befehlszeile zu überschreiben?
- 10. Wie kann ich einen typsicheren Konfigurationslistenwert in der Befehlszeile überschreiben?
- 11. Tabelle über die bq-Befehlszeile überschreiben
- 12. Nachschärfen von der Befehlszeile
- 13. Einstellung der Standardwerte von Argumenten in Python
- 14. java.lang.NoClassDefFoundError in der Befehlszeile
- 15. Verwenden von Maven 'exec: exec' mit Argumenten
- 16. Python-Skript mit Argumenten für die Befehlszeile Blender
- 17. Refresh Eclipse von der Befehlszeile
- 18. sqlplus-Anweisung von der Befehlszeile
- 19. kann Swing von der Befehlszeile
- 20. PHP in der Befehlszeile
- 21. Run Pitest von der Befehlszeile
- 22. Glassfish debuggen von der Befehlszeile
- 23. IIS Express von der Befehlszeile
- 24. SWT & JFace von der Befehlszeile
- 25. installieren avd von der Befehlszeile
- 26. schnell in der Befehlszeile von vim
- 27. Vergleichen von Dateien in der Unix-Befehlszeile
- 28. Speichern von Anmeldeinformationen in der Git-Befehlszeile
- 29. Klartext in der Befehlszeile mit Java
- 30. Wie übergeben Array von Argumenten Powershell Kommandozeile