2012-01-18 20 views
8

क्या सॉफ्टवेयर बनाने/संकलन को तेजी से बनाने का कोई तरीका है? हमारे पास मेकफ़ाइल का उपयोग करके एक बिल्ड पेड़ सी, सी ++ है जो ताजा बिल्ड के लिए 2Hrs के करीब लेता है। मैं इलेक्ट्रिक एक्सेलेरेटर, स्पार्कबिल्ड जैसे कुछ वाणिज्यिक समाधानों में आया, क्या कोई ओपनसोर्स बराबर है?तेजी से निर्माण करने के लिए युक्तियाँ

+0

दो घंटे! पिछली बार मैंने देखा कि निर्माण के समय ओवरलोडेड वैक्स पर थे। संभवतः, यह एक बहुत बड़ी परियोजना है। आप इसे किस पर बना रहे हैं? क्या नेटवर्क ड्राइव पर सभी फाइलें हैं या स्थानीय में कॉपी की गई हैं? –

+0

@ मार्टिनजम्स मैंने कुछ लिस्प, सी, जावा प्रोजेक्ट के लिए 6 घंटे का निर्माण समय देखा है। –

+3

@ सिप्लू - मुझे बहुत खेद है ... मैं पागल हो जाऊंगा। यदि 5.9 घंटों के बाद बिल्ड गलत हो जाता है, तो आप खुद को ऊंची इमारत से कूदने से कैसे रोकते हैं? डेवलपर को आप क्या करते हैं जो अनसुलझा बाहरी उत्पन्न करता है - क्या यह बहुत दर्दनाक है? –

उत्तर

8

आप distcc, ccache और, ज़ाहिर है, -j विकल्प बनाना चाहते हैं।

9

Google पर एक खोज ओपन सोर्स सॉफ्टवेयर की सूची प्राप्त करने में मदद कर सकती है। जहां भी संभव हो

  • उपयोग आगे घोषणाओं:
    W.r.t अपने कोड आप का निर्माण समय को कम करने के लिए निम्न कर सकते हैं।
  • उपयोग नाम स्थान घोषणाओंनाम स्थान के निर्देश के बजाय
  • सुनिश्चित करें कि आपके पास अनावश्यक शामिल नहीं है।
+0

मेरी इच्छा है कि मैं कई +1 कर सकता हूं! –

+0

@SylvainDefresne: धन्यवाद :) –

+0

* घोषणाएं शामिल हैं *? –

2

एक तरीका है कि तेजी से हार्डवेयर पर निर्माण को चलाने के लिए। मुझे एहसास है कि यह हमेशा एक विकल्प नहीं है, लेकिन यह अभी भी कुछ विचार करने के लिए है।

जैसा कि @ मार्टिन का उल्लेख है, अपग्रेड करने के लिए कुछ विशिष्ट उप-प्रणालियों में एक एसएसडी की तरह तेज़ डिस्क का उपयोग करना शामिल है, और रैम, एक तेज़ CPU (और अधिक कोर, यदि आपका कंपाइलर उनका उपयोग कर सकता है) जोड़ना शामिल है, और यह सुनिश्चित करना कि फाइलें बनाई जा रही हैं, सभी बिल्डिंग मशीन (नेटवर्क पर नहीं) के लिए स्थानीय हैं।

आपको इस संसाधन पूल जितना संभव हो उतना निर्माण प्रक्रिया देना चाहिए, इसलिए निर्माण मशीन से सभी गैर-निर्माण-संबंधित प्रक्रियाओं और अनुप्रयोगों को बंद करें। यह किसी भी संसाधन विवाद को कम करेगा।

+1

हां - तेजी से एसएसडी सरणी, रैम का भार, निर्माण के लिए स्थानीय फ़ोल्डर्स को प्रतिलिपि स्रोत। –

+0

बिल्कुल। निर्माण मशीन पर बाधाओं को दूर करना महत्वपूर्ण है।अपग्रेड करने के लिए विशिष्ट आइटम जोड़ने के लिए धन्यवाद। – cdeszaq

+2

.. और सर्फिंग, बिट टोरेंट और गेम वास्तव में भी तेजी से चलते हैं, (बिल्ड के बीच उन छोटे ब्रेक में :) –

4

हमारी कंपनी में हमारे पास बहुत सारे उत्पाद थे जो अब 3-6 घंटे की तरह समय बनाते हैं।

हमारे द्वारा उपयोग की जाने वाली 2 तकनीकें हैं। make

  • माउंट रैम -j विकल्प के लिए एक डिस्क रूप से

    1. उपयोग समानांतर निर्माण। फिर वहां सभी फाइलें ले जाएं और संकलित करें। लेकिन इसके लिए आपको बहुत सी रैम चाहिए। हमने Amazons ec2 उदाहरणों का उपयोग किया। यह काफी महंगा था।
  • +0

    '3-6 घंटे की तरह समय का निर्माण' - आउच! मुझे लगता है कि मुझे एक नया काम मिल जाएगा .. :) –

    +0

    @ मार्टिनजम्स चिंता न करें, हडसन मेरे लिए यह करता है। –

    0

    प्रीकंपिल्ड हेडर, सही ढंग से नियोजित होने पर, निर्माण के समय को काफी कम कर सकते हैं।

    0

    हम distmake, ccache, और makefile-generator के संयोजन का उपयोग करते हैं जो एक समानांतर मेकफ़ाइल बनाता है। C/C++ बिल्ड बेहद अच्छी तरह से समानांतर कर सकते हैं; अक्सर सभी .o फ़ाइलों को समानांतर में संकलित किया जा सकता है।

    Distmake जीएनएल के तहत gnu बनाने और जारी किए जाने के आधार पर एक वितरित कार्यान्वयन है। मैं इसे बनाए रखता हूं। यह आपको कई होस्टों में समानांतर करने देता है। इसके लिए सभी होस्टों को फाइल सिस्टम का एक ही दृश्य होना चाहिए, उदाहरण के लिए। एनएफएस, ताकि एक ही कमांड किसी भी बिल्ड होस्ट पर चल सके।

    ऑप्टिमाइज़ेशन को बंद करने से आपके पास यह विकल्प होगा, यदि आपके पास यह विकल्प है।

    यदि आप पहले से ही समांतर बिल्ड आर्किटेक्चर का उपयोग करते हैं और यह अभी भी धीमा है, तो आपको बस इसका अध्ययन करने की आवश्यकता हो सकती है। स्टॉपवॉच के साथ अपनी प्रगति देखें और देखें कि यह कहां बाधाओं को देखता है। "लंबे ध्रुवों" की तलाश करें जिन्हें शायद आप उम्मीद नहीं करते थे। सौभाग्य।

    0

    आपने अपना कॉन्फ़िगरेशन सॉफ़्टवेयर निर्दिष्ट नहीं किया है, लेकिन हमने क्लीयरकेस के साथ एक समस्या की खोज की है। फ़ाइल के आधार पर फ़ाइल पर नियमों का मूल्यांकन करने के कारण, केवल एक फ़ाइल खोलना एक बाधा हो सकती है। अगर आप क्लीयरकेस के साथ "फंस गए" हैं तो केवल पढ़ने पर विचार करें।

    तो, हमने पाया है कि हेडर फाइलों के लिए अपने शामिल गार्ड को बदलकर, आप अपना निर्माण समय 1/30 वें समय में कर सकते हैं (हमारे लिए यह किया गया था)।

    #ifndef FOO_H 
    #define FOO_H 
    your code 
    #endif 
    
    फिर कहीं और बंद

    , आप foo.h. # शामिल:

    मूल रूप से, अपने हेडर फाइल में, आप एक तरह शीर्ष पर गार्ड शामिल है ठीक है, ठीक है, हमने पाया कि प्रकार की फाइलों के कुछ भयानक युग्मन के कारण और कुछ सामान्य शीर्षकों को प्रत्येक .c फ़ाइल के लिए सैकड़ों बार शामिल किया गया है जिसे हमने संकलित किया है। क्लीयरकेस डिज़ाइन दोष के साथ, इसका अर्थ यह है कि उन फ़ाइलों में से प्रत्येक को सैकड़ों बार केवल सामग्री को अनदेखा करने और फ़ाइल को फिर से बंद करने का मतलब है।

    तो .. केवल f # के लिए शामिल करने के बजाय, गार्ड को सशर्त रूप से शामिल करने के लिए गार्ड का उपयोग करें। आम तौर पर यह बुरा अभ्यास और एक भयानक रखरखाव दुःस्वप्न है (यदि कोई गार्ड बदलना शुरू करता है)।

    तो .. अपने ग फ़ाइल में, आप की तरह कुछ कर रही पहुंचते हैं:

    #include <stdio.h> 
    #ifndef FOO_H 
    #include "foo.h" 
    #endif 
    #ifndef FOO_H 
    #include "foo.h" 
    #endif 
    ... rest of your code implementation 
    

    जैसा कि मैंने कहा था ... बुरा व्यवहार, लेकिन अगर आप clearcase का उपयोग कर रहे हैं और इसके 3 के साथ काट -4 निर्माण के समय (जैसा कि हमारे पास था) ... विचार करने लायक हो सकता है (या सिर्फ अपने पूरे पेड़ की एक प्रतिलिपि को साफ़ करने के बाहर)। या क्लीयरकेस डुबकी। या प्रकार अंतर-निर्भरताओं के साथ एक बेहतर काम करते हैं।

    हम कुछ अधिक उपयोग किए जाने वाले कुछ "ठीक" करने में सक्षम थे और निर्माण के समय में बहुत नाटकीय सुधार प्राप्त करते थे।

    संबंधित मुद्दे