Not Writing a Builder: the Command Builder

SCons User Guide 0.98.0
Prev |  | Next

# Chapter 18. Not Writing a Builder: the `Command` Builder

Creating a `Builder` and attaching it to a `construction environment` allows for a lot of flexibility when you want to re-use actions to build multiple files of the same type. This can, however, be cumbersome if you only need to execute one specific command to build a single file (or group of files). For these situations, SCons supports a `Command` `Builder` that arranges for a specific action to be executed to build a specific file or files. This looks a lot like the other builders (like `Program`, `Object`, etc.), but takes as an additional argument the command to be executed to build the file:

         env = Environment()
         env.Command('foo.out', 'foo.in', "sed 's/x/y/' < $SOURCE > $TARGET")

When executed, SCons runs the specified command, substituting `$SOURCE` and `$TARGET` as expected:

        % scons -Q
        sed 's/x/y/' < foo.in > foo.out

This is often more convenient than creating a `Builder` object and adding it to the `$BUILDERS` variable of a `construction environment`

Note that the action you specify to the `Command` `Builder` can be any legal SCons `Action`, such as a Python function:

         env = Environment()
         def build(target, source, env):
             # Whatever it takes to build
             return None
         env.Command('foo.out', 'foo.in', build)

Which executes as follows:

        % scons -Q
        build(["foo.out"], ["foo.in"])

Prev | Home | Next
Builders That Modify the Target or Source Lists Using an `Emitter` |  | Writing Scanners