Natknąłem się na kilka pytań dotyczących SO dotyczących konkretnych aspektów związanych z poprawą czasu oczekiwania na projekty CM + C++ w ostatnim czasie (np. "At what level should I distribute my build process?" lub "cmake rebuild_cache for just a subdirectory?"), zastanawiałem się, czy istnieją bardziej ogólne wskazówki wykorzystujące konkretne możliwości, jakie oferuje CMake. Jeśli prawdopodobnie nie ma optymalizacji czasu kompilacji między platformami, interesują mnie głównie podejścia oparte na Visual Studio lub GNU oparte na toochainach.Jak przyspieszyć czas kompilacji mojego projektu C++ w CMake?
I jestem już świadoma i inwestowanie w ogólnie zalecanych obszarach przyspieszyć C++ buduje:
Zmień/Optymalizacja/dostroić toolchain
Optymalizacja kodu bazowego/architektura oprogramowania (na przykład poprzez zmniejszenie zależności i używać dobrze zdefiniowanych podprojektów - testy jednostkowe)
zainwestować w lepszy sprzęt (SSD, procesor, pamięć)
jak zalecane here, here lub here. Więc moje skupienie na tym pytaniu dotyczy pierwszego punktu.
Plus wiem zaleceń można znaleźć w CUpewnij w encyklopedii:
Były tylko uchwyty podstawy (marka równoległe), późniejszy uchwyty przeważnie jak przyspieszyć parsowanie plików CMake.
Właśnie zrobić to trochę bardziej konkretny, jeśli biorę przykład CUpewnij z here z 100 bibliotek wykorzystujących Msys/GNU mam następujący time
wyniki pomiaru:
$ 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
Więc mam w sumie ~ 140 sekund, a moim celem - z tego bardzo prostego przykładu - byłoby zejście do 10-20% tego, co otrzymuję dzięki standardowym ustawieniom/narzędziom.
również zastosowanie ccache. Powoduje to niesamowicie szybkie rekompilacje. – csl
Jeśli Twój system kompilacji prawidłowo wykonuje odbudowy przyrostowe, ccache nie powinno być pomocne. Na dobrze napisanej kompilacji cmake, która robi przyrostowe kompilacje w prawo, ccache w rzeczywistości spowalnia z nadwyżką. W przeszłości miałem powodzenie z ccache na projektach z systemami budującymi szczątki, które nie tworzyły przyrostowej kompilacji (firefox, lata temu) –