题
简单的问题,但我不知道答案。
让我们说我有一个scons
建立在我的CCFLAGS
包括-O1
。我有一个文件needsOptimization.cpp
,我想覆盖与-O1
的-O2
代替。我怎么能在scons的做到这一点?
更新:这是我结束了基于bialix的回答这样做的:
在我的SConscript文件:
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);
...
解决方案
使用对象()助洗剂用于细粒度控制编译,然后传递这些对象程序()的助洗剂。
E.g。代替:
env = Environment()
env.Program(target='foo', source=['foo.cpp', 'bar.cpp', 'needsOptimisation.cpp'])
您需要使用以下内容:
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)
可以避免环境变量的单独的克隆的创建,如果你提供CCFLAGS =“ - O2”在Object()调用右:
obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2]
其他提示
避免单独的环境变量的创建需要(参照 bialix的回答)。需要这样的东西
obj_o2 = env.Object(SRC_O2, CCFLAGS=env['CCFLAGS'] + ['-O2']);
如果你只是这样做(或像bialix循环一样)
obj_o2 = env.Object(SRC_O2, CCFLAGS='-O2');
然后你失去所有的内置标志。
不隶属于 StackOverflow