Variant Builds

SCons User Guide 0.98.0
Prev |  | Next

# Chapter 16. Variant Builds

The `variant_dir` keyword argument of the `SConscript` function provides everything we need to show how easy it is to create variant builds using SCons. Suppose, for example, that we want to build a program for both Windows and Linux platforms, but that we want to build it in a shared directory with separate side-by-side build directories for the Windows and Linux versions of the program.

        platform = ARGUMENTS.get('OS', Platform())

        include = "#export/$PLATFORM/include"
        lib = "#export/$PLATFORM/lib"
        bin = "#export/$PLATFORM/bin"

        env = Environment(PLATFORM = platform,
                          BINDIR = bin,
                          INCDIR = include,
                          LIBDIR = lib,
                          CPPPATH = [include],
                          LIBPATH = [lib],
                          LIBS = 'world')

        Export('env')

        env.SConscript('src/SConscript', variant_dir='build/$PLATFORM')

This SConstruct file, when run on a Linux system, yields:

        % scons -Q OS=linux
        Install file: "build/linux/world/world.h" as "export/linux/include/world.h"
        cc -o build/linux/hello/hello.o -c -Iexport/linux/include build/linux/hello/hello.c
        cc -o build/linux/world/world.o -c -Iexport/linux/include build/linux/world/world.c
        ar rc build/linux/world/libworld.a build/linux/world/world.o
        ranlib build/linux/world/libworld.a
        Install file: "build/linux/world/libworld.a" as "export/linux/lib/libworld.a"
        cc -o build/linux/hello/hello build/linux/hello/hello.o -Lexport/linux/lib -lworld
        Install file: "build/linux/hello/hello" as "export/linux/bin/hello"

The same SConstruct file on Windows would build:

        C:\>scons -Q OS=windows
        Install file: "build/windows/world/world.h" as "export/windows/include/world.h"
        cl /nologo /Iexport\windows\include /c build\windows\hello\hello.c /Fobuild\windows\hello\hello.obj
        cl /nologo /Iexport\windows\include /c build\windows\world\world.c /Fobuild\windows\world\world.obj
        lib /nologo /OUT:build\windows\world\world.lib build\windows\world\world.obj
        Install file: "build/windows/world/world.lib" as "export/windows/lib/world.lib"
        link /nologo /OUT:build\windows\hello\hello.exe /LIBPATH:export\windows\lib world.lib build\windows\hello\hello.obj
        Install file: "build/windows/hello/hello.exe" as "export/windows/bin/hello.exe"

Prev | Home | Next
Using `VariantDir` With an `SConscript` File |  | Writing Your Own Builders