Como acelerar o tempo de compilação do meu projeto C ++ habilitado para CMake?

Eu me deparei com várias questões de SO relacionadas a aspectos específicos da melhoria do tempo de resposta dos projetos em C ++ habilitados para CMake recentemente (como"Em que nível devo distribuir meu processo de compilação?" ou"cmake rebuild_cache parasomente um subdiretório? "), Fiquei imaginando se há uma orientação mais geral utilizando as possibilidades específicas que o CMake oferece. Se provavelmente não houver otimização do tempo de compilação entre plataformas, estou interessado principalmente em abordagens baseadas em toochain do Visual Studio ou GNU.

E já estou ciente e investindo nas áreas geralmente recomendadas para acelerar as compilações de C ++:

Alterar / otimizar / ajustar a cadeia de ferramentas

Otimize sua arquitetura de base de código / software (por exemplo, reduzindo as dependências e use subprojetos bem definidos - testes de unidade)

Invista em um hardware melhor (SSD, CPU, memória)

como recomendadoaqui, aqui ouaqui. Portanto, meu foco nesta questão está no primeiro ponto.

Além disso, conheço as recomendações que podem ser encontradas no Wiki do CMake:

CMake: construindo com todos os seus núcleosDicas de desempenho do CMake

O primeiro trata apenas do básico (fabricação paralela), o posterior trata principalmente de como acelerar a análise de arquivos CMake.

Só para tornar isso um pouco mais concreto, se eu pegar meu exemplo do CMake deaqui com 100 bibliotecas usando MSYS / GNU, obtive o seguintetime Resultados de medição:

$ 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

Portanto, tenho um total de ~ 140 segundos e meu objetivo - para este exemplo reconhecidamente muito simples - seria reduzir isso para cerca de 10 a 20% do que recebo com as configurações / ferramentas padrão.

questionAnswers(2)

yourAnswerToTheQuestion