[Scons-users] persistent but local tweaks to a node's environment
Mats Wichmann
mats at wichmann.us
Sun Jul 25 09:52:37 EDT 2021
On 7/24/21 4:18 AM, Gabe Black wrote:
> Hi! The project I work on builds several different versions of its
> outputs, like a debug version, an optimized version, etc. Also, some
> files in the project, for instance automatically generated files, need
> to have slightly customized build flags, like disabling certain warnings
> that are false positives and/or are in source we can't change.
>
> Right now we handle that by creating an environment for each build,
> which I think is the standard approach. Unfortunately, we then have to
> have a separate step which goes through and generates new environments
> based on those for each file that needs its slightly customized build flags.
>
> What I would *like* to do, is to be able to specify for any given node
> that it should build using the flags that would be implied by the
> environment that's pulling it in, except that they should be tweaked
> just a little bit. Something like:
>
> Object('foo.cc', '-Wno-deprecated-copy')
>
> and then:
>
> opt.Program('foo.opt', 'foo.cc', CCFLAGS='${CCFLAGS} -O3')
> debug.Program('foo.debug', 'foo.cc', CCFLAGS='${CCFLAGS} -g',
> OBJSUFFIX='.do')
> etc
>
> and then have foo.do build with "-Wno-deprecated-copy -g", and foo.o
> build with "-Wno-deprecated-copy -O3"
>
> The problem is, that as soon as I tell SCons to use custom variables, it
> Clone-s the underlying environment and disassociates from the underlying
> environment.
could you explain what you're seeing a little further?
In the case of construction variable overrides in a builder call, it
doesn't Clone, as that's considered expensive, it just builds an
override dictionary, and it doesn't disassociate - it retains the
underlying construction environment and only applies the override dict
if there were any overrides - so it's supposed to be a kind of
copy-on-write setup. Since this doesn't seem to match what you're
seeing it would be good to figure out what's actually happening.
More information about the Scons-users
mailing list