web-dev-qa-db-ja.com

CLionでは大規模なCMakeプロジェクトの読み込みが遅い

CLionを使用するために、いくつかの大きなmakefileベースのアプリケーションをCMakeに変換しようとしています。

ただし、プロジェクトを開くたびに、CLionはCMakeプロジェクトをロードするのに約15分かかりますが、メモリインジケーターは「1987MBの750」未満のままです。私はCMakeの初心者であることを認めているので、CMakeLists.txtファイルは最適ではないと思います。

基本的に、すべてのアプリケーションは独自のディレクトリに特定のソースコードを持っており、いくつかの「共通」ライブラリを使用しています。 githubで共有するための構造的に同等のプロジェクトを作成しました:

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

そのプロジェクトには、アプリケーション「a」と2つの一般的なライブラリ「atlas」と「greeting」があります。すべてのライブラリには、Googletestテストを含む「test」フォルダが含まれています。

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

実際には、以下に共通のライブラリが約12あり、合計で約1500の.cppファイルと.hppファイルがあり、それらはすべてBoostと標準ライブラリを使用しています。

Githubのプロジェクトのマスターブランチには、最初の試みが含まれています。ここでは、すべてのディレクトリが「add_subdirectory」を使用して参照されます。 (with_extブランチでの)2番目の試みは、依存ライブラリにExternalProject_Addを使用することです。 'greeting'からテストをコンパイル/実行すると、依存関係 'atlas'も正しくコンパイルされます。ただし、「atlas」のテストをコンパイル/実行しようとします(失敗します...)。テストなしで「atlas」をコンパイルする方法を理解できませんでした。

では、示されているように、ソースコードベースで動作するようにCMakeプロジェクトをより適切に設計するにはどうすればよいですか?

(注:Jetbrains CLionフォーラムでも同じ質問をしました: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207559245-Large-CMake-Project- load-is-slow-in-CLion-

12
pesche

問題は実際にはCMakeLists.txtではありません。 CLionは、cmakeで参照されているすべてのソースファイルを解析して、ほとんどの機能(ナビゲーション、コード補完、リファクタリング)を有効にします。私の経験では、大規模なプロジェクトのインデックス作成には数分(数十分)かかる場合があります。

この問題を軽減する方法は、プロジェクトの「サードパーティ」ディレクトリをそのようにマークすることです。commonディレクトリを右クリックし、Mark directory as... > Librariesをクリックします。必要に応じて、プロジェクトからディレクトリを除外することもできます。

CLionインデックス作成の結果がキャッシュされることにも注意してください。最初のインデックス作成後、プロジェクトを再起動する場合でも、変更されたファイルのみを再解析する必要があります(CMakeListsのビルドオプションを変更すると、完全な再インデックス作成がトリガーされる場合があることに注意してください)

5
etienne

ヒープサイズを増やしてみましたか?

https://www.jetbrains.com/help/idea/increasing-memory-heap.html

[ビルドファイルのプロパティ]ダイアログボックスから、[最大ヒープサイズ]フィールドを増やしてみてください。

0
Lincoln