Controlling Command-Line Build Options

SCons User Guide 0.98.0
Prev | Chapter 9. Controlling a Build From the Command Line | Next

# 9.6. Controlling Command-Line Build Options

Being able to use a command-line build option like `debug=1` is handy, but it can be a chore to write specific Python code to recognize each such option and apply the values to a construction variable. To help with this, SCons supports a class to define such build options easily, and a mechanism to apply the build options to a construction environment. This allows you to control how the build options affect construction environments.

For example, suppose that you want users to set a `RELEASE` construction variable on the command line whenever the time comes to build a program for release, and that the value of this variable should be added to the command line with the appropriate `-D` option (or other command line option) to pass the value to the C compiler. Here's how you might do that by setting the appropriate value in a dictionary for the `$CPPDEFINES` construction variable:

             opts = Options()
             opts.Add('RELEASE', 'Set to 1 to build for release', 0)
             env = Environment(options = opts,
                               CPPDEFINES={'RELEASE_BUILD' : '${RELEASE}'})
             env.Program(['foo.c', 'bar.c'])

This `SConstruct` file first creates an `Options` object (the `opts = Options()` call), and then uses the object's `Add` method to indicate that the `RELEASE` option can be set on the command line, and that it's default value will be `0` (the third argument to the `Add` method). The second argument is a line of help text; we'll learn how to use it in the next section.

We then pass the created `Options` object as an `options` keyword argument to the `Environment` call used to create the construction environment. This then allows a user to set the `RELEASE` build option on the command line and have the variable show up in the command line used to build each object from a C source file:

          % scons -Q RELEASE=1
          cc -o bar.o -c -DRELEASE_BUILD=1 bar.c
          cc -o foo.o -c -DRELEASE_BUILD=1 foo.c
          cc -o foo foo.o bar.o

Prev | Home | Next
Command-Line `variable`=`value` Build Options | Up | Providing Help for Command-Line Build Options