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 before executing 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 Precious and 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 Precious when the -c option is used.