2016-06-03 5 views
7

में बड़े सीएमके परियोजना लोडिंग धीमी है, मैं उन पर सीएलओएन का उपयोग करने के लिए कई बड़े मेकफ़ाइल-आधारित अनुप्रयोगों को सीएमके में परिवर्तित करने की कोशिश कर रहा हूं।सीएलओएन

हर बार जब मैं प्रोजेक्ट खोलता हूं, हालांकि, सीएमओएन को सीएमके परियोजना को लोड करने में लगभग एक घंटे का समय लगता है, जबकि स्मृति संकेतक "1987 एमबी के 750" से नीचे रहता है। मैं मानता हूं कि मैं एक सीएमके नौसिखिया हूं, इसलिए मुझे लगता है कि मेरी सीएमके लिस्ट.txt फ़ाइलें इष्टतम नहीं हैं।

असल में प्रत्येक एप्लिकेशन के पास अपनी निर्देशिका में कुछ विशिष्ट स्रोत कोड होता है और कुछ 'सामान्य' पुस्तकालयों का उपयोग कर रहा है। मैं GitHub पर साझा करने के लिए एक संरचना की दृष्टि से बराबर परियोजना बना दिया है:

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

कि इस परियोजना में एक आवेदन पत्र 'एक' और दो आम librairies 'एटलस' और 'ग्रीटिंग' है। प्रत्येक पुस्तकालय में Googletest परीक्षणों के साथ एक फ़ोल्डर 'परीक्षण' होता है।

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

हकीकत में वहाँ उन सभी को बूस्ट और मानक पुस्तकालय, और कुछ नहीं का उपयोग कर, कुल में लगभग 1500 सीपीपी और .hpp फाइलों के साथ आम नीचे एक दर्जन से अधिक पुस्तकालयों के बारे में कर रहे हैं।

जिथब पर प्रोजेक्ट की मास्टर शाखा में मेरा पहला प्रयास है, जहां सभी निर्देशिकाओं को 'add_subdirectory' का उपयोग करके संदर्भित किया जाता है। दूसरा प्रयास (with_ext शाखा में) निर्भर पुस्तकालयों के लिए ExternalProject_Add का उपयोग कर रहा है। जब मैं 'ग्रीटिंग' से परीक्षणों को संकलित/चलाता हूं तो यह निर्भरता 'एटलस' भी सही ढंग से संकलित करता है। हालांकि यह 'एटलस' के परीक्षणों को संकलित/चलाने की भी कोशिश करता है (जो विफल रहता है ...) और मैं परीक्षण के बिना 'एटलस' को संकलित करने के तरीके को कैसे काम नहीं कर सका।

तो मुझे दिखाए गए स्रोत कोड बेस के साथ काम करने के लिए सीएमके परियोजना को बेहतर तरीके से कैसे डिजाइन करना चाहिए?

(नोट: मैं JetBrains Clion मंच में एक ही प्रश्न पूछा है भी: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207559245-Large-CMake-Project-loading-is-slow-in-CLion-)

उत्तर

4

मुद्दा वास्तव में CMakeLists.txt साथ नहीं है। अधिकांश सुविधाओं (नेविगेशन, कोड-पूर्णता, रिफैक्टरिंग) को सक्षम करने के लिए सीएलओएन में संदर्भित सभी स्रोत फ़ाइलों का विश्लेषण करता है। मेरे अनुभव में, बड़ी परियोजनाओं को अनुक्रमणित करने में कई (दसियों) मिनट लग सकते हैं।

इस समस्या को कम करने का एक तरीका है अपनी परियोजना की "थर्ड पार्टी" निर्देशिकाओं को इस तरह चिह्नित करना है: common निर्देशिका, और Mark directory as... > Libraries पर राइट-क्लिक करें। यदि आवश्यक हो तो आप परियोजना से निर्देशिका को बाहर भी निकाल सकते हैं।

भी ध्यान रखें कि Clion अनुक्रमण के परिणाम कैश नहीं किया जाता: आरंभिक अनुक्रमण के बाद, केवल संशोधित फ़ाइलों reparsed किया जाना चाहिए, भले ही परियोजना को पुन: प्रारंभ (ध्यान दें कि CMakeLists में निर्माण विकल्पों को संशोधित एक पूर्ण फिर से सूचकांक ट्रिगर हो सकता है)

+0

मैंने इसे कभी नहीं समझा, लेकिन आप सही हैं। यदि मैं लगातार दो बार परियोजना लोड करता हूं, तो दूसरी बार तेज़ होता है (पहली बार: सीएमके पीढ़ी 935 के दशक, 270 के निर्माण का प्रतीक; दूसरी बार: सीएमके पीढ़ी 49, निर्माण प्रतीक 177 एस)। यह अच्छा होगा अगर दूसरी बार प्रतीक लोड करने में और भी कैशिंग हो सकती है ... लेकिन एक समस्या बनी हुई है: क्योंकि पुस्तकालयों का स्रोत कोड अक्सर बदलता है, कैशिंग बहुत मदद नहीं करता है। मैं अभी भी निर्देशिकाओं को पुस्तकालयों के रूप में चिह्नित करने में देखूंगा ... – pesche