2009-11-19 11 views
8

मैं अपनी परियोजनाओं को स्रोत से बाहर बनाने के लिए सेमेक का उपयोग कर रहा हूं, जो वास्तव में सुविधाजनक है क्योंकि आप अनावश्यक फ़ाइलों के साथ अपनी स्रोत निर्देशिका को प्रदूषित करने से बचते हैं।स्रोत से बाहर स्कोन के साथ निर्माण?

mkdir build 
cd build 
cmake .. 
make 

मैं कैसे SCons में भी ऐसा ही कर सकते हैं:

CMakeLists.txt मान लिया जाये कि इस प्रकार यह किया जा सकता है, वर्तमान निर्देशिका में है?

उत्तर

9

अपने 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 
+0

लेकिन तुम सिर्फ एक कमांड लाइन तर्क यह हार्डकोड से बचने के लिए के रूप में 'variant_dir' पैरामीटर का मान पारित नहीं कर सकते हैं? – JesperE

+0

आप कर सकते हैं, लेकिन आपको इसे हर बार 'scons' कमांड लाइन पर पास करना याद रखना होगा। – richq

संबंधित मुद्दे