SCons: How to use the same builders for multiple variants (release/debug) of a program

build, environment, scons, variant

Solution

SConscript is a method defined on the environment itself:

for dir, env in (('release', opt), ('debug', dbg)):
    env.SConscript('SConscript', 'env', variant_dir=dir)

And then from the SConscript you can:

Import('env')

Problem

The SCons User Guide tells about the usage of Multiple Construction Environments to build build multiple versions of a single program and gives the following example: ``` opt = Environment(CCFLAGS = '-O2') dbg = Environment(CCFLAGS = '-g') o = opt.Object('foo-opt', 'foo.c') opt.Program(o) d = dbg.Object('foo-dbg', 'foo.c') dbg.Program(d) ``` Instead of manually assigning different names to the objects compiled with different environments, `VariantDir()` / `variant_dir` sounds like a better solution... But if I place the `Program()` builder inside the SConscript: ``` Import('env') env.Program('foo.c') ``` How can I export different environments to the same SConscript file? ``` opt = Environment(CCFLAGS = '-O2') dbg = Environment(CCFLAGS = '-g') SConscript('SConscript', 'opt', variant_dir='release') #'opt' --> 'env'??? SConscript('SConscript', 'dbg', variant_dir='debug') #'dbg' --> 'env'??? ``` Unfortunately the discussion in the SCons Wiki does not bring more insight to this topic. Thanks for your input!

Original source