scons: overriding build options for one file
scons
Solution
Use Object() builder for fine-grained control over compilation, and then pass these objects to Program() builder.
E.g. instead of:
env = Environment()
env.Program(target='foo', source=['foo.cpp', 'bar.cpp', 'needsOptimisation.cpp'])
You need to use following:
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)
You can avoid creation of separate clone of env variable if you provide CCFLAGS='-O2' right in the Object() call:
obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2]
Problem
Easy question but I don't know the answer. Let's say I have a `scons` build where my `CCFLAGS` includes `-O1`. I have one file `needsOptimization.cpp` where I would like to override the `-O1` with `-O2` instead. How could I do this in scons? update: this is what I ended up doing based on bialix's answer: in my SConscript file: ``` 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)); ... ``` previously this file was: ``` Import('env'); sourceFiles = ['main.cpp','pwm3phase.cpp','serialencoder.cpp','uartTestObject.cpp']; objectFiles = env.Object(sourceFiles); ... ```