Chapter 13. Controlling Removal of Targets
Prev |  | Next

## Chapter 13. Controlling Removal of Targets

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.

## 13.1. Preventing target removal during build: the `Precious` Function

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.

Prev |  | Next
12.7. Executing an action immediately: the `Execute` Function | Home | 13.2. Preventing target removal during clean: the `NoClean` Function