स्वचालित - स्रोत वृक्ष को कैसे साफ रखें?


10

मेरे पास एक परियोजना है जो स्वयं के निर्माण के लिए जीएनयू ऑटोटूल का उपयोग करती है। मैं संशोधित करने का प्रयास कर रहा हूं ताकि ऑटोटूलस सभी गैर-संस्करण नियंत्रण फ़ाइलों को एक अलग निर्देशिका में उत्पन्न करता है ताकि मैं अस्थायी फ़ाइलों के स्रोत के पेड़ को साफ रख सकूं। किसी को कोई विचार है कि यह कैसे करना है?


6
बस एक आउट-ऑफ-ट्री बिल्ड करें: stackoverflow.com/questions/1311231/… यह अभी भी दुर्भाग्य से कुछ अवशेष छोड़ता है। किसी दिन सीएमके प्रयास करें।
विटर पाय जूल

3
वह दिन आ गया है, मुझे उस बदसूरत ऑटोकोफ से सेमीक में स्विच करने में एक घंटे से भी कम समय लगा जो कि बहुत अधिक क्लीनर लगता है।
वोरद

1
ऑटोकॉक की तुलना में सीमेक एक तरह से क्लीनर है: वास्तव में, सीमेक बिल्ड करने के लिए ट्री बिल्ड का एक सबसे आम तरीका है। अच्छा विकल्प :)
विटोरे पाय

स्रोत पेड़ के शीर्ष पर एक मेकफिल होना कितना सामान्य है जो सीमेक के साथ निर्माण प्रक्रिया को नियंत्रित करता है? कहो कर चलेंगे mkdir -p निर्माण && सीडी का निर्माण && cmake बना .. && (शायद की तरह अलग अलग ठिकानों पर और इतने मेकअप परीक्षण आदि)।
वोरद

असामान्य। सीएमके को मेकफाइल्स उत्पन्न करना चाहिए, अन्य तरीके से नहीं! वास्तविक शब्द उदाहरणों के लिए Mastering CMake या VTK या KDE निर्माण प्रक्रियाओं नामक एक पुस्तक की तलाश करें। सीमेक का एक बड़ा फायदा मेक के ऊपर हो रहा है: यह विजुअल स्टूडियो vcproj, nmake Makefiles, XCode आदि का उपयोग करके आपके सॉफ़्टवेयर का निर्माण भी कर सकता है। KDE बिल्ड प्रक्रियाओं को शुरू करने के लिए एक शेल स्क्रिप्ट ('kdebuild') का उपयोग करता है - शायद आप लेना चाहते हैं इसे देखो।
विटोर पाय

जवाबों:


2

ऑटोटूलस पैकेज में एक अच्छे कारण के लिए बहुत कठिन कोडित रिश्तेदार पथ और नाम हैं। आपका सबसे अच्छा विकल्प उत्पादन योग और के रूप में अपने संशोधन नियंत्रण में नजरअंदाज कर दिया, जैसे में उन्हें टैग करने के लिए है .cvsignore, .hgignoreया के रूप में svn:ignoreattibute। कुछ RCS आपको वाइल्डकार्ड को पुनरावर्ती रूप से निर्दिष्ट करने देते हैं।


4
इस कठिन कोडित रिश्तेदार पथ अन्य करने के लिए एक भी अच्छा कारण नहीं है तो यह 1970 के दशक की यूनिक्स प्रोग्रामिंग शैली है।
लोथर

2

समाधान: एक स्रोत का निर्माण करें

  • जैसा कि टिप्पणियों में सुझाया गया है, आप आउट-ऑफ-सोर्स बिल्ड कर सकते हैं।
  • सिद्धांत यह है: एक और निर्देशिका बनाएं, एक "बिल्ड ट्री", उस निर्देशिका से स्क्रिप्ट को कॉन्फ़िगर करें (सापेक्ष या पूर्ण पथ के साथ)।

स्वचालित जाँच के साथ उदाहरण

उदाहरण के लिए, यह ग्नू हेलो का निर्माण और निर्माण करेगा और जाँच करेगा कि स्रोत वृक्ष को थोड़ा सा नहीं बदला गया है।

स्रोत पेड़ की तैयारी

इस हिस्से को लाने और निर्देशिका तैयार करता है।

{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}

जेनेरिक हिस्सा: पुन: उपयोग करें कि आपकी परियोजना में

इस भाग का उपयोग अन्य ऑटोकॉन्फ़-आधारित परियोजनाओं के साथ किया जा सकता है। बस चलाने से पहले अपने प्रोजेक्ट में cd करें। खबरदार: यह रन rm, अगर वेरिएंट के साथ खेल रहे हैं, तो सावधान रहें, आप किसी भी मामले में प्रतिगामी हैं।

export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)

भाग की जाँच करें

यह जाँचता है कि निर्माण पूरी तरह से स्रोत से बाहर है।

{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}

यहाँ यह इसका आउटपुट देता है:

/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.

बोनस: गैर-रूट इंस्टॉल

--prefix="${MYPREFIX?}"भाग ऊपर वैकल्पिक है। यह एक "इंस्टॉल करें" करने की अनुमति देता है जो आपके खाते के लिए स्थानीय है। यदि आप पारंपरिक "सुडोल मेक इनस्टॉल" चाहते हैं तो सिस्टम-वाइड लोकेशन पर, आप हटा सकते हैं --prefix="${MYPREFIX?}"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.