अपने SConstruct
फ़ाइल में, आप एक प्रकार dir का उपयोग करें:
SConscript("main.scons", variant_dir="build", duplicate=0)
फिर main.scons
में आप हमेशा की तरह सब कुछ सेट:
env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))
यह में संस्करण dir हार्डकोड बिना ऐसा करना संभव है भंडारों का उपयोग करके (एबी) द्वारा स्कैनस्ट्रक्चर, लेकिन उस दृष्टिकोण में इसकी बग है। रिकॉर्ड के लिए, यदि आप ऊपर के रूप में एक और निर्देशिका में निर्माण करने के लिए इस प्रकार चल पाएंगे:
mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons
सबसे आसान और सबसे व्यावहारिक सिर्फ variant_dir
उपयोग करने के लिए है। फिर आप इसे शीर्ष स्तर की स्रोत निर्देशिका से सामान्य रूप से चलाते हैं। सभी निर्माण कलाकृतियों को build
उप निर्देशिका में उत्पादित किया जाता है। करने के लिए,
AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)
तो फिर तुम कमांड लाइन से इस फोन देंगी:
JesperE की टिप्पणी के जवाब में, इस तरीके से एक वैकल्पिक नामित निर्माण निर्देशिका जोड़ने के लिए शीर्ष स्तर SConstruct लिख सकता है निर्माण निर्देशिका "baz" कहा जाता है बनाने के लिए:
$ scons --build=baz
लेकिन तुम सिर्फ एक कमांड लाइन तर्क यह हार्डकोड से बचने के लिए के रूप में 'variant_dir' पैरामीटर का मान पारित नहीं कर सकते हैं? – JesperE
आप कर सकते हैं, लेकिन आपको इसे हर बार 'scons' कमांड लाइन पर पास करना याद रखना होगा। – richq