You can also use the VariantDir function to establish
that target files should be built in a separate directory tree
from the source files:
VariantDir('build', 'src')
env = Environment()
env.Program('build/hello.c')
When using this form, you have to tell SCons that sources and targets are in the variant directory, and those references will trigger the remapping, necessary file copying, etc. for an already established variant directory. Here is the same example in a more spelled out form to show this more clearly:
VariantDir('build', 'src')
env = Environment()
env.Program(target='build/hello', source=['build/hello.c'])
When using the VariantDir function directly,
SCons still duplicates the source files
in the variant directory by default:
%ls srchello.c %scons -Qcc -o build/hello.o -c build/hello.c cc -o build/hello build/hello.o %ls buildhello 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 srchello.c %scons -Qcc -o build/hello.o -c src/hello.c cc -o build/hello build/hello.o %ls buildhello hello.o