2010-01-06 12 views
6

आसान सवाल है लेकिन मुझे जवाब नहीं पता।स्कॉन्स: एक फ़ाइल के लिए बिल्डिंग विकल्पों को ओवरराइड करना

मान लें कि मेरे पास scons है जहां मेरा CCFLAGS-O1 शामिल है। मेरे पास एक फ़ाइल needsOptimization.cpp है जहां मैं -O1 को -O2 के साथ ओवरराइड करना चाहता हूं। मैं स्कैन में यह कैसे कर सकता हूं?


अद्यतन:

मेरी SConscript फ़ाइल में

: यह है कि क्या मैं bialix के उत्तर के आधार पर कर समाप्त हो गया है

Import('env'); 

env2 = env.Clone(); 
env2.Append(CCFLAGS=Split('-O2 --asm_listing')); 

sourceFiles = ['main.cpp','pwm3phase.cpp']; 
sourceFiles2 = ['serialencoder.cpp','uartTestObject.cpp']; 
objectFiles = []; 
objectFiles.append(env.Object(sourceFiles)); 
objectFiles.append(env2.Object(sourceFiles2)); 
    ... 

पहले इस फाइल था:

Import('env'); 

sourceFiles = ['main.cpp','pwm3phase.cpp','serialencoder.cpp','uartTestObject.cpp']; 
objectFiles = env.Object(sourceFiles); 
    ... 

उत्तर

9

संकलन पर ठीक-ठीक नियंत्रण के लिए ऑब्जेक्ट() बिल्डर का उपयोग करें, एक डी फिर इन वस्तुओं को प्रोग्राम() बिल्डर को पास करें।

उदा। के बजाय:

env = Environment() 
env_o1 = env.Clone() 
env_o1.Append(CCFLAGS = '-O1') 

env_o2 = env.Clone() 
env_o2.Append(CCFLAGS = '-O2') 

# extend these lists if needed 
SRC_O1 = ['foo.cpp', 'bar.cpp'] 
SRC_O2 = ['needsOptimisation.cpp'] 

obj_o1 = [env_o1.Object(i) for i in SRC_O1] 
obj_o2 = [env_o2.Object(i) for i in SRC_O2] 

env.Program(target='foo', source=obj_o1+obj_o2) 

आप env चर का अलग क्लोन के निर्माण से बच सकते हैं अगर आप CCFLAGS = प्रदान '- O2' वस्तु() कॉल में सही:

env = Environment() 
env.Program(target='foo', source=['foo.cpp', 'bar.cpp', 'needsOptimisation.cpp']) 

आप निम्न का उपयोग करने की जरूरत है:

obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2] 
6

एक अलग env चर के बनाने से बचना की आवश्यकता है (संदर्भ: bialix's answer) कुछ इस तरह की जरूरत है।

obj_o2 = env.Object(SRC_O2, CCFLAGS=env['CCFLAGS'] + ['-O2']); 

आप सिर्फ इस (या bialix तरह पाश के लिए करता है में)

obj_o2 = env.Object(SRC_O2, CCFLAGS='-O2'); 

तो करते हैं कि आप सभी builtin झंडे खो देते हैं।

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