मैं स्कैन का उपयोग करके एक बिल्ड सिस्टम तैयार करने की कोशिश कर रहा हूं। मैं कोड जनरेशन चरण के लिए clang
और अन्य सभी चीज़ों के लिए एक कस्टम कंपाइलर टूलचेन का उपयोग करना चाहता हूं।कोड जनरेशन और असेंबली के लिए अलग-अलग टूल्स का उपयोग करने के लिए स्कैन कॉन्फ़िगर करना
डिफ़ॉल्ट रूप से, SCons कॉन्फ़िगरेशन में एक स्पष्ट चरण नहीं है जिसमें असेंबली (.s)
फ़ाइलें उत्पन्न होती हैं।
इस के आसपास जाने के लिए, मैंने अपना खुद का Builder
बनाया जो असेंबली फ़ाइलों को उत्सर्जित करता है।
code_generator = Builder(action = '$CC -$LOTS_OF_FLAGS -S $SOURCE -o $TARGET', suffix = '.s')
env.Append(BUILDERS = {'CodeGenerator':code_generator})
मैं तो मेरे स्रोत फ़ाइलों पर इस Builder
का उपयोग करें और Program
के परिणामस्वरूप NodeList
गुजरती हैं।
for file in Glob('*.c'):
sources += env.CodeGenerator(file)
env.Program('say_hello', sources)
यह किसी भी चर को संशोधित नहीं करता है, यह अच्छी तरह से काम करता है। मुझे gcc
का उपयोग करके निष्पादन योग्य मिलता है।
हालांकि, जब मैं उचित चर को प्रतिस्थापित करने का प्रयास करता हूं ताकि SCons कस्टम टूलचेन का उपयोग कर सकें (env.Replace(CC='clang')...
का उपयोग करके), केवल एक असेंबली फ़ाइल उत्पन्न होती है। मेरे कस्टम Builder
किसी अन्य फाइल पर नहीं बुलाया जाता है और SCons केवल एक ही वस्तु फ़ाइल के साथ
- लिंक करने के लिए (जो स्पष्ट रूप से विफल रहता है) मैं SCons सभी फाइलों पर बिल्डर चलाने के लिए और जोड़ने के लिए उन वस्तु फ़ाइलों को शामिल कर सकते हैं कैसे की कोशिश करता है ?
- क्या मैं क्या करने की कोशिश कर रहा हूं इसे पूरा करने का एक बेहतर तरीका है? मैं बस स्कैन के साथ काम करना शुरू कर रहा हूँ।
यहां तक कि प्रस्तावित ठीक करने के बाद, मैं एक ही मुद्दे का सामना करना पड़ रखना: foo.c और bar.c उत्पादन पैदा करता है। लेकिन मैन पेज में अतिरिक्त दस्तावेज के बारे में टिप्पणी के लिए धन्यवाद। आप सही थे, मैं केवल उपयोगकर्ता मार्गदर्शिका का जिक्र कर रहा था। आगे की जांच करेंगे और अगर मैं सफल हूं तो वापस रिपोर्ट करूंगा। – Buzzy
आप किस स्कैन का उपयोग कर रहे हैं? –
मैक पर होमब्रू का उपयोग करके स्थापित: स्क्रिप्ट: v2.1.0.r5357 इंजन: v2.1.0।r5357 – Buzzy