2016-06-03 24 views
7

Bazı büyük makefile tabanlı uygulamaları CMake'e dönüştürmek için üzerlerinde CLion kullanmak istiyorum.Büyük CMake Proje yüklemesi yavaş çalışıyor CLion

Projeyi her açışımda, CMion projesini yüklemek için CLion saatte bir saat alıyor, bellek göstergesi ise "1987 MB'nin 750" altında kalıyor. Ben bir CMake newbie olduğumu itiraf ediyorum, bu yüzden benim CMakeLists.txt dosyalarım optimal değildir.

Temel olarak her uygulamanın kendi dizininde belirli bir kaynak kodu vardır ve birkaç 'ortak' kitaplık kullanmaktadır. Github üzerinde paylaşım için yapısal olarak eşdeğer bir proje yaptık: O projede

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

bir uygulama 'a' ve iki ortak Librairies 'atlas' ve 'tebrik' yoktur. Her kütüphane Googletest testleri ile bir 'test' klasörü içerir.

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

Gerçekte hepsi Boost ve standart kütüphane, başka bir şey kullanarak, toplamda yaklaşık 1500 .cpp ve .hpp dosyaları ile ortak altında bir düzine kütüphaneleri hakkında bulunmaktadır.

Github üzerindeki projenin ana dalı, tüm dizinlerin 'add_subdirectory' kullanılarak başvurulan ilk denememi içerir. İkinci giriş (with_ext dalında) bağımlı kütüphaneler için ExternalProject_Add kullanıyor. Testleri "selamlama" dan derlediğimde/çalıştırdığımda, 'atlas' bağımlılığını da doğru şekilde derler. Ancak aynı zamanda 'atlas' testlerini derlemeye/çalıştırmaya çalışır (ki bu da başarısız olur ...) ve test yapmadan 'atlas'ı nasıl derleyeceğimi bilemedim.

CMake projesini, gösterildiği gibi kaynak kod tabanıyla çalışmak üzere nasıl daha iyi tasarlamalıyım?

(Not: Ben JetBrains CLION forumda da aynı soruyu sordum: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207559245-Large-CMake-Project-loading-is-slow-in-CLion-)

cevap

4

konu CMakeLists.txt ile gerçekten değil. CLion, çoğu özelliği etkinleştirmek için cmake'de başvurulan tüm kaynak dosyalarını ayrıştırır (gezinme, kod tamamlama, yeniden düzenleme). Deneyimlerime göre, büyük projelerin indekslenmesi birkaç (on) dakikaya kadar sürebilir.

Bu sorunu azaltmanın bir yolu, projenizin "üçüncü taraf" dizinlerini şu şekilde işaretlemektir: common dizininize sağ tıklatıp Mark directory as... > Libraries. Gerekirse dizinleri projeden hariç tutabilirsiniz.

Ayrıca, CLion endeksleme sonuçlarının önbelleğe alındığını unutmayın: ilk dizinden sonra, yalnızca yeniden başlatılan dosyalar, projeyi yeniden başlatırken bile yeniden dağıtılmalıdır (CMakeLists'teki derleme seçeneklerini değiştirmenin tam bir yeniden indeksi tetikleyebileceğini unutmayın)

+0

Bunu hiç anlamadım, ama haklısınız. Projeyi arka arkaya iki kez yüklersek, ikinci kez daha hızlı (ilk kez: CMake üretimi 935s, bina sembolleri 270s; ikinci kez: CMake üretimi 49s, bina sembolleri 177s). Sembolün ikinci kez yüklenmesi daha fazla önbelleğe sahip olsaydı çok güzel olurdu ... Ama bir sorun olmaya devam ediyor: kütüphanelerin kaynak kodu sık sık değiştiği için, önbellekleme çok fazla yardımcı olmaz. Dizinleri kütüphaneler olarak işaretlemeye devam edeceğim. – pesche

İlgili konular