Build Systems

Spack defines a number of classes which understand how to use common build systems (Makefiles, CMake, etc.). Spack package definitions can inherit these classes in order to streamline their builds.

This guide provides information specific to each particular build system. It assumes that you’ve read the Packaging Guide and expands on these ideas for each distinct build system that Spack supports:

Make-based

Make-incompatible

For reference, the Build System API docs provide a list of build systems and methods/attributes that can be overridden. If you are curious about the implementation of a particular build system, you can view the source code by running:

$ spack edit --build-system autotools

This will open up the AutotoolsPackage definition in your favorite editor. In addition, if you are working with a less common build system like QMake, SCons, or Waf, it may be useful to see examples of other packages. You can quickly find examples by running:

$ cd var/spack/repos/builtin/packages
$ grep -l QMakePackage */package.py

You can then view these packages with spack edit.

This guide is intended to supplement the Build System API docs with examples of how to override commonly used methods. It also provides rules of thumb and suggestions for package developers who are unfamiliar with a particular build system.