Even when using the BuildDir function, it's much more natural to use it with a subsidiary SConscript file. For example, if the src/SConscript looks like this:
env = Environment() env.Program('hello.c')
Then our SConstruct file could look like:
BuildDir('build', 'src') SConscript('build/SConscript')
Yielding the following output:
% ls src SConscript hello.c % scons -Q cc -o build/hello.o -c build/hello.c cc -o build/hello build/hello.o % ls build SConscript hello hello.c hello.o
Notice that this is completely equivalent to the use of SConscript that we learned about in the previous section.