When &SCons; builds a target file, it does not execute the commands with the same external environment that you used to execute &SCons;. Instead, it uses the dictionary stored in the &ENV; construction variable as the external environment for executing commands. The most important ramification of this behavior is that the &PATH; environment variable, which controls where the operating system will look for commands and utilities, is not the same as in the external environment from which you called &SCons;. This means that &SCons; will not, by default, necessarily find all of the tools that you can execute from the command line. The default value of the &PATH; environment variable on a POSIX system is /usr/local/bin:/bin:/usr/bin. The default value of the &PATH; environment variable on a Win32 system comes from the Windows registry value for the command interpreter. If you want to execute any commands--compilers, linkers, etc.--that are not in these default locations, you need to set the &PATH; value in the &ENV; dictionary in your construction environment. The simplest way to do this is to initialize explicitly the value when you create the construction environment; this is one way to do that: path = ['/usr/local/bin', '/bin', '/usr/bin'] env = Environment(ENV = {'PATH' : path})
Propagating &PATH; From the External Environment You may want to propagate the external &PATH; to the execution environment for commands. You do this by initializing the &PATH; variable with the &PATH; value from the os.environ dictionary, which is Python's way of letting you get at the external environment: import os env = Environment(ENV = {'PATH' : os.environ['PATH']}) Alternatively, you may find it easier to just propagate the entire external environment to the execution environment for commands. This is simpler to code than explicity selecting the &PATH; value: import os env = Environment(ENV = os.environ) Either of these will guarantee that &SCons; will be able to execute any command that you can execute from the command line. The drawback is that the build can behave differently if it's run by people with different &PATH; values in their environment--for example, both the /bin and /usr/local/bin directories have different &cc; commands, then which one will be used to compile programs will depend on which directory is listed first in the user's &PATH; variable.