समाधान: एक स्रोत का निर्माण करें
- जैसा कि टिप्पणियों में सुझाया गया है, आप आउट-ऑफ-सोर्स बिल्ड कर सकते हैं।
- सिद्धांत यह है: एक और निर्देशिका बनाएं, एक "बिल्ड ट्री", उस निर्देशिका से स्क्रिप्ट को कॉन्फ़िगर करें (सापेक्ष या पूर्ण पथ के साथ)।
स्वचालित जाँच के साथ उदाहरण
उदाहरण के लिए, यह ग्नू हेलो का निर्माण और निर्माण करेगा और जाँच करेगा कि स्रोत वृक्ष को थोड़ा सा नहीं बदला गया है।
स्रोत पेड़ की तैयारी
इस हिस्से को लाने और निर्देशिका तैयार करता है।
{
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?}"
।