Use the VariantDir
function to establish that target
files should be built in a separate directory
from the source files:
VariantDir('build', 'src') env = Environment() env.Program('build/hello.c')
Note that when you're not using
an SConscript
file in the src
subdirectory,
you must actually specify that
the program must be built from
the build/hello.c
file that SCons will duplicate in the
build
subdirectory.
When using the VariantDir
function directly,
SCons still duplicates the source files
in the variant directory by default:
%ls src
hello.c %scons -Q
cc -o build/hello.o -c build/hello.c cc -o build/hello build/hello.o %ls build
hello hello.c hello.o
You can specify the same duplicate=False
argument
that you can specify for an SConscript
call:
VariantDir('build', 'src', duplicate=False) env = Environment() env.Program('build/hello.c')
In which case SCons will disable duplication of the source files:
%ls src
hello.c %scons -Q
cc -o build/hello.o -c src/hello.c cc -o build/hello build/hello.o %ls build
hello hello.o