2010-01-06 19 views
6

Kolay soru ama cevabı bilmiyorum.scons: tek dosya için derleme seçenekleri oluşturma

Bir scons yapısına sahip olduğumu varsayalım, CCFLAGS benim -O1 içeriyor. Bunun yerine,numaralı bir dosyam var, bunun yerine -O1'u -O2 ile geçersiz kılmak istiyorum. Bunu scons'ta nasıl yapabilirim?


güncelleme: my SConscript dosyasında

: Bu ben bialix en Yanıta göre yapıyor sona budur önceden

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)); 
    ... 

bu dosyayı oldu:

Import('env'); 

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

cevap

9

Derleme üzerinde ince ayarlı denetim için Object (oluşturucu) öğesi kullanın. d sonra bu nesneleri Program() oluşturucuya iletin.

E.g. yerine: Eğer CCFLAGS = sağlarsanız

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) 

Sen env değişkeninin ayrı klon oluşturulmasını önleyebilirsiniz '- O2' hakkını Object() çağrısında:

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

Aşağıdaki kullanmak gerekir: böyle bir şey gerekir: ayrı bir env değişkeni oluşturmayı kaçınmak

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

(bialix's answer ref) gerektirir. Sadece o zaman bu (veya bialix gibi döngü için yapar)

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

yaparsanız

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

tüm yerleşik bayraklarını kaybederler.

İlgili konular