%scons; %builders-mod; %functions-mod; %tools-mod; %variables-mod; ]>
Merging Options into the Environment: the &MergeFlags; Function &SCons; construction environments have a &MergeFlags; method that merges a dictionary of values into the construction environment. &MergeFlags; treats each value in the dictionary as a list of options such as one might pass to a command (such as a compiler or linker). &MergeFlags; will not duplicate an option if it already exists in the construction environment variable. &MergeFlags; tries to be intelligent about merging options. When merging options to any variable whose name ends in PATH, &MergeFlags; keeps the leftmost occurrence of the option, because in typical lists of directory paths, the first occurrence "wins." When merging options to any other variable name, &MergeFlags; keeps the rightmost occurrence of the option, because in a list of typical command-line options, the last occurrence "wins." env = Environment() env.Append(CCFLAGS = '-option -O3 -O1') flags = { 'CCFLAGS' : '-whatever -O3' } env.MergeFlags(flags) print env['CCFLAGS'] scons -Q Note that the default value for &cv-link-CCFLAGS; is an internal &SCons; object which automatically converts the options we specified as a string into a list. env = Environment() env.Append(CPPPATH = ['/include', '/usr/local/include', '/usr/include']) flags = { 'CPPPATH' : ['/usr/opt/include', '/usr/local/include'] } env.MergeFlags(flags) print env['CPPPATH'] scons -Q Note that the default value for &cv-link-CPPPATH; is a normal Python list, so we must specify its values as a list in the dictionary we pass to the &MergeFlags; function. If &MergeFlags; is passed anything other than a dictionary, it calls the &ParseFlags; method to convert it into a dictionary. env = Environment() env.Append(CCFLAGS = '-option -O3 -O1') env.Append(CPPPATH = ['/include', '/usr/local/include', '/usr/include']) env.MergeFlags('-whatever -I/usr/opt/include -O3 -I/usr/local/include') print env['CCFLAGS'] print env['CPPPATH'] scons -Q In the combined example above, &ParseFlags; has sorted the options into their corresponding variables and returned a dictionary for &MergeFlags; to apply to the construction variables in the specified construction environment.