Wie beschleunige ich die Kompilierungszeit meines CMake-fähigen C ++ - Projekts?

Ich bin in letzter Zeit auf mehrere SO-Fragen zu bestimmten Aspekten der Verbesserung der Durchlaufzeit von CMake-fähigen C ++ - Projekten gestoßen (z. B. "Auf welcher Ebene soll ich meinen Erstellungsprozess verteilen?" oder "cmake rebuild_cache forgerad ein Unterverzeichnis? "), Ich habe mich gefragt, ob es eine allgemeinere Anleitung gibt, die die spezifischen Möglichkeiten nutzt, die CMake bietet. Wenn es wahrscheinlich keine plattformübergreifende Optimierung der Kompilierungszeit gibt, interessieren mich hauptsächlich Visual Studio- oder GNU-toochain-basierte Ansätze.

Und ich kenne bereits die allgemein empfohlenen Bereiche und investiere in sie, um C ++ - Builds zu beschleunigen:

Ändern / Optimieren / Optimieren der Toolchain

Optimieren Sie Ihre Codebasis / Softwarearchitektur (z. B. durch Verringern der Abhängigkeiten und Verwenden klar definierter Unterprojekte - Komponententests).

Investieren Sie in eine bessere Hardware (SSD, CPU, Speicher)

wie empfohlenHie, Hie oderHie. Mein Fokus in dieser Frage liegt also auf dem ersten Punkt.

Plus Ich kenne die Empfehlungen in CMakes Wiki:

CMake: Bauen mit all deinen KernenCMake Leistungstipps

Das erstere behandelt nur die Grundlagen (paralleles Make), das spätere behandelt hauptsächlich, wie das Parsen von CMake-Dateien beschleunigt wird.

Nur um das etwas konkreter zu machen, wenn ich mein CMake-Beispiel aus @ nehHie mit 100 Bibliotheken mit MSYS / GNU habe ich die folgendentime Messergebnisse

$ cmake --version
cmake version 3.5.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).

$ time -p cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
-- Configuring done
-- Generating done
-- Build files have been written to: [...]
real 27.03
user 0.01
sys 0.03        

$ time -p make -j8
...
[100%] Built target CMakeTest
real 113.11
user 8.82
sys 33.08

So habe ich insgesamt ~ 140 Sekunden und mein Ziel - für dieses zugegebenermaßen sehr einfache Beispiel - wäre es, dies auf ungefähr 10-20% von dem zu reduzieren, was ich mit den Standardeinstellungen / -werkzeugen erhalte.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage