2016-06-03 72 views
7

Sto provando a convertire diverse grandi applicazioni basate su makefile in CMake per utilizzare CLion su di esse.Il grande carico di lavoro di CMake Project è lento in CLion

Ogni volta che apro il progetto, tuttavia, CLion impiega circa un quarto d'ora per caricare il progetto CMake, mentre l'indicatore di memoria rimane sotto "750 di 1987MB". Ammetto di essere un principiante di CMake, quindi suppongo che i miei file CMakeLists.txt non siano ottimali.

Fondamentalmente ogni applicazione ha un codice sorgente specifico in una directory a sé stante e utilizza un paio di librerie "comuni". Ho fatto un progetto strutturalmente equivalente per la condivisione su GitHub:

https://github.com/pe-st/zalophus/tree/master/tree

In quel progetto c'è una domanda 'a' e 'atlante' due librairies comuni e 'saluto'. Ogni libreria contiene una cartella 'test' con test Googletest.

+ common 
| + atlas 
| | + test 
| + greeting 
| + test 
+ a 

in realtà ci sono circa una dozzina di librerie sotto comune con circa 1500 file cpp e .hpp in totale, tutti loro con Boost e la libreria standard, nient'altro.

Il ramo master del progetto su github contiene il mio primo tentativo, in cui tutte le directory sono referenziate usando 'add_subdirectory'. Il secondo tentativo (nel ramo with_ext) utilizza ExternalProject_Add per le librerie dipendenti. Quando compilo/eseguo i test da 'greeting', compila correttamente anche l''atlante' delle dipendenze. Comunque cerca anche di compilare/eseguire i test di 'atlas' (che fallisce ...) e non ho potuto capire come compilare semplicemente 'atlas' senza i test.

Quindi, come dovrei progettare meglio il progetto CMake affinché funzioni con una base di codice sorgente come mostrato?

(Nota: ho chiesto la stessa domanda anche nel forum JetBrains Clion: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207559245-Large-CMake-Project-loading-is-slow-in-CLion-)

risposta

4

Il problema non è davvero con la CMakeLists.txt. CLion analizza tutti i file sorgente a cui fa riferimento in cmake per abilitare la maggior parte delle funzionalità (navigazione, completamento del codice, refactoring). Nella mia esperienza, l'indicizzazione di progetti di grandi dimensioni può richiedere fino a diversi (decine di) minuti.

Un modo per mitigare questo problema è contrassegnare le directory di "terze parti" del progetto in quanto tale: fare clic con il pulsante destro sulla directory common e Mark directory as... > Libraries. È anche possibile escludere le directory dal progetto se necessario.

Si noti inoltre che i risultati del Clion indicizzazione vengono memorizzati nella cache: dopo l'indicizzazione iniziale, solo i file modificati devono essere reparsed, anche al riavvio del progetto (Si noti che la modifica delle opzioni di generazione in CMakeLists potrebbe innescare una completa ri-index)

+0

Non l'ho mai capito, ma hai ragione. Se carico il progetto due volte di seguito, la seconda volta è più veloce (prima volta: generazione 935 di CMake, creazione di simboli 270, seconda volta: generazione di CMake 49s, creazione di simboli 177s). Sarebbe bello se il caricamento del simbolo la seconda volta potesse avere anche più cache ... Ma rimane un problema: dato che il codice sorgente delle librerie cambia spesso ogni giorno, la memorizzazione nella cache non aiuta molto. Cercherò comunque di marcare le directory come librerie ... – pesche