References
Last updated on 2025-04-16 | Edit this page
Running SCons
To run SCons:
SCons will look for a configuration file called
SConstruct and will build the default target(s).
To use a configuration file with a different name, use the
--sconstruct option e.g.
To build a specific target, provide it as an argument e.g.
If the target is up-to-date, SCons will print a message like:
OUTPUT
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `isles.dat' is up to date.
scons: done building targets.
To see the actions SCons will run when building a target, without
running the actions, use the --dry-run flag e.g.
Alternatively, use the abbreviation -n.
Trouble Shooting
TBD
Configuration files
SCons uses Python as the configuration language. Tasks can be defined in Python class/function call syntax.
Tasks:
- Each task has one or more targets, the files to be created, or built.
 - Each task has one or more sources, the depedencies that are needed to build the target.
 - Targets and sources can be passed as list via keyword arguments.
 - Each rule has one or more actions, commands to run to build the target using the sources.
 - Actions are provided as a list of strings via keyword arguments.
 
Dependencies:
- If any source does not exist then SCons will look for a task to build it.
 - The order of rebuilding dependencies is declarative. You should not assume that they will be built in the order in which they are listed.
 - Dependencies must form a directed acyclic graph. A target cannot depend on a dependency which, in turn depends upon, or has a dependency which depends upon, that target.
 
Comments:
List continuation:
PYTHON
archive = [
    "isles.dat",
    "isles.png",
    "abyss.dat",
    "abyss.png",
    "sierra.dat",
    "sierra.png",
]
- If a list of targets, sources, or actions is too long, an SConstruct file can become more difficult to read.
 - Python allows you to split up a list over multiple lines, to make them easier to read.
 - Python will combine the multiple lines into a single list
 
Cleaning targets:
SCons can clean specific targets with the --clean
option
and clean all targets with the . special target
Alias targets:
SCons can define aliases as short-hand for collections of build targets.
PYTHON
target_nodes = Command(
    target=["target1", "target2"],
    source=["source"],
    action=["action"]
)
Alias("target_alias", target_nodes)
- Alias targets are a short-hand for building target lists.
 
Special variables:
SCons has several special variables available for task construction. A few common use cases are mentioned here.
- 
$SOURCEand$SOURCES[0]denote ‘the first source of the current task’. - 
$SOURCESdenotes ‘the sources of the current task’. - 
$TARGETand$TARGETS[0]denote ‘the first target of the current task’. - 
$TARGETSdenotes ‘the dependencies of the current task’. - 
$TARGET.filebasedenotes ‘the stem of the first target of the current task’. 
Builders:
SCons users can write custom builders for commonly re-used actions.
PYTHON
my_builder = Builder(
    action=["action"]
)
env = Environment(BUILDERS={"MyBuilder": my_builder})
env.MyBuilder(
    target=["target"],
    source=["source"]
)
Psuedo-builders:
SCons users can write custom pseudo-builders to handle common file types or Builder argument parsing.
PYTHON
import pathlib
def count_books(env, name, count_executable="python", count_source="count_words.py"):
    target = [f"{name}.dat"]
    source = [
        pathlib.Path("books") / f"{name}.txt",
        count_source,
    ]
    target_nodes = env.Command(
        target=target,
        source=source,
        action=["${count_executable} ${count_source} ${TARGET} ${SOURCES}"],
        count_executable=count_executable,
        count_source=count_source,
    )
    return target_nodes
env = Environment()
env.AddMethod("CountBooks", count_books)
env.CountBooks("isles")
env.CountBooks("abyss")
Defining and using variables:
SCons uses Python as the configuration language. Variables may be defined in Python syntax.
- A variable is assigned a value. For example,
count_sourceis assigned the string"wordcount.py". - 
f-string
syntax allows string construction from variables. The value of
count_sourcewill be used in the string construction ofcount_exectuable. 
Suppress printing of actions:
SCons provides several mechanisms to control output. The
-Q flag suppresses printing of progress messages. The
--silent flag suppresses printing of the command actions.
Individual task actions may suppress printing commands with a preceding
@ symbol.
PYTHON
target_nodes = Command(
    target=["target"],
    source=["source"],
    action=["@action"],
)
Alias("target", target_nodes)
- Prefix an action by 
@to instruct SCons not to print that action. 
Multiple configuration files:
SCons provides the option to call more than one configuration file
with the SConscript
function. These are conventionally named SConscript, but
could take any file name.
wildcard function:
SCons provides a Glob method to construct lists of files.
- Looks for all files matching a pattern
e.g. 
books/*.txt, and return these in a list. - e.g. 
text_filesis set to["books/abyss.txt", "books/isles.txt", "books/last.txt", "books/sierra.txt"]. 
List comprehensions:
Python has a list comprehension feature for constructing lists. In combination with the pathlib module, OS agnostic path manipulation can be performed on lists of files.
PYTHON
import pathlib
text_files = ["books/abyss.txt", "books/isles.txt", "books/last.txt", "books/sierra.txt"]
text_paths = [pathlib.Path(book) for book in text_files]
data_paths = [book.with_suffix("*.dat") for book in text_paths if book.parent == "books" and book.suffix == ".txt"]
data_files = [str(book) for book in book_paths]
- Every string that matches 
books/*.txtintext_pathsis replaced by*.datand the strings are returned in a list. - e.g. if 
text_filesis["books/abyss.txt", "books/isles.txt", "books/last.txt", "books/sierra.txt"]this setsdata_filesto["books/abyss.dat", "books/isles.dat", "books/last.dat", "books/sierra.dat"]. - SCons >= 4.6 can operate on pathlib objects natively, so the final conversion back to strings is not strictly necessary.
 
Default targets:
SCons has a Default function for changing the default target list.
- Unless otherwise specified, all targets are part of the default targets list.
 - If the 
Defaultmethod is called, only those targets explicitly included are part of the default targets list 
Manuals
SCons Documentation includes
Glossary
- action
 - The steps a build manager must take to create or update a file or other object.
 - assignment
 - A request that Python stores something in a variable.
 - builder
 - An re-useable SCons task definition with a predefined action.
 - build file
 - A synonym for configuration file
 - configuration file
 - A description of tasks for a build manager. Also called a build file.
 - build manager
 - A program, such as SCons, whose main purpose is to build or update software, documentation, web sites, data files, images, and other things.
 - default target
 - The target that is built if no target is specified when a build manager is run.
 - dependency
 - A synonym for source.
 - false dependency
 - This can refer to a dependency that is artificial. e.g. a false dependency is introduced if a data analysis script is added as a dependency to the data files that the script analyses.
 - function
 - A Python, SCons, or user-defined function that performs some operation, for example gets a list of files matching a pattern.
 - Glob
 - A pattern matching search function provided by SCons: Glob.
 - incremental build
 - The feature of a build manager by which it only rebuilds files that, either directory or indirectly, depend on a file that was changed.
 - Make
 - A popular build manager, from GNU, created in 1977.
 - Makefile
 - 
A build file used by Make,
which, by default, are named 
Makefile. - prerequisite
 - A synonym for source.
 - Python
 - A commonly used programming language in computational science and engineering.
 - SCons
 - 
A Python-based, open-source build manager based on the 
ScConsbuild tool designed for a Software Carpentry Build competition in August 2000: [SCons][scons]. - SConstruct
 - The primary configuration file for the SCons build manager.
 - SConscript
 - The conventional name for secondary configuration files for the SCons build manager. Also the generic name for the full set of SCons configuration files.
 - source
 - A file that a target depends on. If any of a target’s sources are newer than the target itself, the target needs to be updated. A target’s sources are also called its prerequisites or dependencies. If a target’s sources do not exist, then they need to be built first.
 - special variable
 - A reserved substitution variable that SCons will substitute with its value in action strings.
 - stem
 - 
The part of the target that was matched by the pattern rule. If the
target is 
file.datand the target pattern was%.dat, then the stem$*isfile. - target
 - A thing to be created or updated, for example a file. Targets can have sources that must exist, and be up-to-date, before the target itself can be built or updated.
 - task
 - A specification of a target’s sources and what actions need to be executed to build or update the target.
 - variable
 - A symbolic name for something in an SCons configuration file.
 - wildcard
 - A pattern that can be specified in the Glob function search for files.