Ich habe die neueste CMake Build und versuche alle Build-Konfigurationen (Debug, MinSizeRel, RelWithDebugInfo, Release, General) Ich sehe nirgends (Textsuche) in generierten Makefiles die Zeichenfolge -lto
, also oder die Funktionalität ist immer noch nicht vorhanden , oder es erfordert manuelle Interversion (in diesem Fall eine Textsuche für LTO oder Link Zeitoptimierung) über die Dokumentation gibt kein Ergebnis, so sehe ich nirgends in der offiziellen Dokumentation eine Möglichkeit, LTO zu aktivieren.
Gibt es eine Möglichkeit, LTO "global" (für alle Compiler) zu aktivieren, ohne manuell Flags festzulegen, die schlimmstenfalls nur von GCC unterstützt werden könnten?
Gute Nachrichten! CMake v3.9 unterstützt schließlich LTO .
Hier ist ein Beispielcode, um zu zeigen, wie es funktioniert:
%Vor% Für GCC fügt dies -flto -fno-fat-lto-objects
zu den Zielkompilierbefehlen hinzu.
Das Modul CheckIPOSupported bietet eine Überprüfung, ob interprozedurale Optimierung (IPO / LTO) vom Compiler unterstützt wird oder nicht:
%Vor% Wenn keine Argumente übergeben werden (= check_ipo_supported()
), wird ein Fehler angezeigt, der anzeigt, dass er nicht unterstützt wird. Andernfalls wird die Variable result
auf YES
oder NO
gesetzt. Weitere Details sind in der Dokumentation des Moduls beschrieben.
LTO ist entweder für ein einzelnes Ziel oder als Standard für alle Ziele aktiviert.
So aktivieren Sie LTO für einen Zielsatz INTERPROCEDURAL_OPTIMIZATION
bis TRUE
. Dies geschieht durch den Befehl set_property()
:
Es ist möglich, LTO standardmäßig zu aktivieren, indem Sie CMAKE_INTERPROCEDURAL_OPTIMIZATION
festlegen bis TRUE
:
Dies aktiviert INTERPROCEDURAL_OPTIMIZATION
für alle Ziele, die nach dieser Zeile erstellt wurden. Die zuvor erstellten sind nicht betroffen.
Ja, laut Quellcode gibt es keine Unterstützung für LTO für gcc / clang Compiler. Sie haben nur eine Unterstützung für den Intel-Compiler.
Ich habe eine grep-Ausgabe für cmake 3.4.3:
%Vor%Wie Sie sehen können, haben wir nur ein Intel Plattformmodul.
Also habe ich eine Feature-Anfrage für diese äußerst nützliche Funktion erstellt: Ссылка