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 a 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 behaviors 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