क्या लापता निर्भरताओं के परीक्षण के लिए कोई तरीका है जो कई नौकरियों के साथ एक परियोजना संकलित करते समय दिखाता है (-जेएन जहां एन> 1)?लापता निर्भरताओं के लिए मेकफ़ाइल का परीक्षण कैसे करें?
मुझे अक्सर पैकेज का सामना करना पड़ता है, ज्यादातर ओपन सोर्स, जहां बिल्ड प्रक्रिया तब तक ठीक काम करती है जब तक मैं -j1, या -jN का उपयोग करता हूं जहां एन अपेक्षाकृत कम मूल्य 4 या 8 है, लेकिन यदि मैंने उच्च मानों का उपयोग किया 48 , थोड़ा असामान्य, अनुपलब्ध निर्भरताओं के कारण यह विफल होना शुरू हो जाता है।
मैंने खुद को एक बैश स्क्रिप्ट बनाने का प्रयास किया जो लक्ष्य दिया गया था, सभी निर्भरताओं को समझता था और स्पष्ट रूप से उन निर्भरताओं में से प्रत्येक को स्पष्ट रूप से बनाने की कोशिश करता था ताकि यह सत्यापित किया जा सके कि कोई भी अपनी पर निर्भरता नहीं खो रहा है। ऐसा लगता है कि छोटे/मध्यम पैकेज के साथ काम करना प्रतीत होता है लेकिन उदाहरण के लिए uClibc की तरह अधिक महत्वपूर्ण में विफल रहता है।
मैं यहां अपनी स्क्रिप्ट साझा कर रहा हूं, क्योंकि कुछ लोग कोड को पढ़कर मेरा क्या मतलब समझ सकते हैं। मैं यह भी आशा करता हूं कि एक और मजबूत समाधान मौजूद है और इसे वापस साझा किया जा सकता है।
#!/bin/bash
TARGETS=$*
echo "TARGETS=$TARGETS"
for target in $TARGETS
do
MAKE="make"
RULE=`make -j1 -n -p | grep "^$target:"`
if [ -z "$RULE" ]; then
continue
fi
NEWTARGETS=${RULE#* }
if [ -z "$NEWTARGETS" ]; then
continue
fi
if [ "${NEWTARGETS}" = "${RULE}" ]; then
# leaf target, we do not want to test.
continue
fi
echo "RULE=$RULE"
# echo "NEWTARGETS=$NEWTARGETS"
$0 $NEWTARGETS
if [ $? -ne 0 ]; then
exit 1
fi
echo "Testing target $target"
make clean && make -j1 $target
if [ $? -ne 0 ]; then
echo "Make parallel will fail with target $target"
exit 1
fi
done
मुझे यकीन है कि वास्तव में क्या सवाल है ... मैं वहाँ विस्तृत रूप से एक से समानांतर शुद्धता की पुष्टि करने के लिए किसी भी बेहतर तरीका नहीं लगता कि नहीं कर रहा हूँ आपने वर्णन किया है: प्रत्येक लक्ष्य के लिए एक बिल्ड चला रहा है और यह सत्यापित करता है कि यह काम करता है। मुझे नहीं लगता कि, हालांकि, आपको बिल्ड को '-j1' तक सीमित करना है। यदि वे '-j1' पर असफल होने जा रहे हैं तो वे निश्चित रूप से उच्च '-j' पर असफल हो जाएंगे, ताकि आप अपने निर्माण को तेज कर सकें। – MadScientist
यह बड़ी परियोजनाओं पर कैसे गिरता है? क्या यह व्यावहारिक तरीके से या मैन्युअल आमंत्रण परिप्रेक्ष्य की कठिनाई/कठिनाई में विफल रहता है? –
मुझे लगता है कि '-j1' मुखौटा को कई प्रीरेक मुद्दों के रूप में मजबूर करना पड़ता है क्योंकि यह खुले में मजबूर होता है। मान लीजिए कि किसी भी 'लक्ष्य: prereqA prereqB' सूचीबद्ध क्रम में prereqs बनाए गए हैं, जहां' prereqA' 'prereqB' पर निर्भर करता है, यह घोषणा किए बिना कि '-j1' के साथ असफल हो जाएगा लेकिन' -jN' से गुजर सकता है। उन prereqs ('prereqB prereqA') के क्रम को घुमाएं और '-j1' कभी विफल नहीं होगा लेकिन' -jN' हो सकता है (लेकिन समान रूप से अच्छी तरह से नहीं हो सकता है, आपको सुनिश्चित करने के लिए prereq आदेश को फ़ज़ करना होगा)। –