2016-06-03 2 views
7

Я пытаюсь преобразовать несколько больших приложений на основе make-файлов в CMake, чтобы использовать CLion на них.Большая загрузка проекта CMake медленна в CLION

Каждый раз, когда я открываю проект, CLION занимает около четверти часа, чтобы загрузить проект CMake, в то время как индикатор памяти остается ниже «750 из 1987 МБ». Я признаю, что я новичок в CMake, поэтому я думаю, что мои файлы CMakeLists.txt не оптимальны.

В основном каждое приложение имеет определенный исходный код в собственной папке и использует пару «общих» библиотек. Я сделал структурно эквивалентный проект для обмена на GitHub:

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

В этом проекте есть приложение «а» и «Атлас» два общих librairies и «приветствие». Каждая библиотека содержит тестовую папку с тестами Googletest.

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

В действительности существует около десятка библиотек ниже общих с около 1500 .cpp и .hpp файлов в общем, все из них с помощью подталкивание и стандартную библиотеку, ничего другого.

Основная ветвь проекта на github содержит мою первую попытку, на которую ссылаются все каталоги с помощью 'add_subdirectory'. Вторая попытка (в ветке with_ext) использует ExternalProject_Add для зависимых библиотек. Когда я компилирую/запускает тесты из «приветствия», он правильно компилирует также атлас зависимости. Однако он также пытается скомпилировать/запустить тесты «атласа» (который терпит неудачу ...), и я не мог понять, как просто компилировать «атлас» без тестов.

Итак, как мне лучше проектировать проект CMake для работы с базой исходного кода, как показано на рисунке?

(Примечание: я задал тот же вопрос также в форуме JetBrains CLion: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207559245-Large-CMake-Project-loading-is-slow-in-CLion-)

ответ

4

Вопрос на самом деле не с CMakeLists.txt. CLion анализирует все исходные файлы, указанные в cmake, чтобы включить большинство функций (навигация, завершение кода, рефакторинг). По моему опыту, индексирование больших проектов может занять до нескольких (десятков) минут.

Способ устранения этой проблемы заключается в том, чтобы пометить «сторонние» каталоги вашего проекта как такового: щелкните правой кнопкой мыши на своем каталоге common и Mark directory as... > Libraries. При необходимости вы даже можете исключить каталоги из проекта.

Также обратите внимание, что результаты индексирования CLI сохраняются в кеш: после первоначальной индексации рефарируются только модифицированные файлы, даже при перезапуске проекта (обратите внимание, что изменение параметров сборки в CMakeLists может вызвать полный переиндекс)

+0

Я так и не понял, но вы правы. Если я дважды загружаю проект подряд, второй раз быстрее (первый раз: генерация CMake 935s, создание символов 270s, второй раз: генерация PSake 49, создание символов 177s). Было бы неплохо, если бы во второй раз можно было бы загружать символ второй раз ... Но остается одна проблема: поскольку исходный код библиотеки часто меняется ежедневно, кеширование не помогает. Я все еще буду смотреть в каталоги маркировки как библиотеки ... – pesche

Смежные вопросы