Re: Per target env variables
Hua Yanghao <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CAPTzt1CW3jMAkgmpK23ax2-6LAfzYWz++eSeCozEdhvgF9BwTA@mail.gmail.com> |
Not sure how Object(CFLAGS = old + new) is handled, but I have verified that definitely going to customize for each and every object, and no clash seen. If this, behind the scene is also using a Clone() somehow I starts to understand why my build startup is a bit slow (totally acceptable though, e.g. for a build that creates 22 different target, a few hundred C files each), around 9 seconds before the first build prints on screen. On Mon, Sep 10, 2018 at 2:40 PM Petteri Hintsanen <[email protected]> wrote: > > On Wed, Sep 05, 2018 at 11:57:38PM -0400, Bill Deegan wrote: > > Here's the caveat. > > Don't make a gazillion Clone's they're not lightweight. > > If you make 100, it won't kill you, if you make 1000's you may start seeing > > memory and speed impacted. > > This is news to me. I have always thought that cloning is relatively > cheap. > > We use simple wrappers around standard SCons functions Library and > Program to simplify dependency handling, mostly for linking against > static libraries and importing packages via pkg-config. Greatly > simplified, it looks something like this: > > link_envs = [] > > def build_bin(env, target, sources, libs, pkgs): > # Import packages > if pkgs: > env = env.Clone() > # use pkg-config to bring CFLAGS into env > # and append pkg-config --libs into libs > import_pkgs(env, pkgs, libs) > > # Compile > objs = env.StaticObject(sources) > > # Link > link_env = env > if libs: > link_env = env.Clone() > link_envs.append([link_env, libs]) > > program = link_env.Program(target, objs) > > link_envs contain all (cloned) environments that have link-time > dependencies. They are augmented by link_env.Append(LIBS = ...) > after all SConscripts have been read, so that programs will be linked > against libraries they depend on. [To do that we use a dictionary > which maps between strings and Library nodes (we refer to libraries > by their names, ie. strings).] > > This is done after all SConscritps have been read because that way we > do not need to worry about the evaluation order of various > SConscripts which define the said libraries. Nor do we need to > Export("mylib") in SConscript that builds "mylib" or Import("mylib") > in SConscripts that refer to "mylib". > > But in this scheme we clone a lot. Maybe this is too heavyweight? > > Regards, > Petteri > _______________________________________________ > Scons-users mailing list > [email protected] > https://pairlist4.pair.net/mailman/listinfo/scons-users _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users