There are two occasions when SCons will,
by default, remove target files.
The first is when SCons determines that
an target file needs to be rebuilt
and removes the existing version of the target
The second is when SCons is invoked with the
-c option to "clean"
a tree of its built targets.
These behaviours can be suppressed with the
NoClean functions, respectively.
By default, SCons removes targets before building them.
Sometimes, however, this is not what you want.
For example, you may want to update a library incrementally,
not by having it deleted and then rebuilt from all
of the constituent object files.
In such cases, you can use the
Precious method to prevent
SCons from removing the target before it is built:
env = Environment(RANLIBCOM='') lib = env.Library('foo', ['f1.c', 'f2.c', 'f3.c']) env.Precious(lib)
Although the output doesn't look any different, SCons does not, in fact, delete the target library before rebuilding it:
% scons -Q cc -o f1.o -c f1.c cc -o f2.o -c f2.c cc -o f3.o -c f3.c ar rc libfoo.a f1.o f2.o f3.o
SCons will, however, still delete files marked as
when the -c option is used.