This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Comparison of build systems
From Gentoo Wiki (test)
This article tries to provide a brief comparison of various build systems.
Basic information
Description | Autotools | CMake | SCons |
---|---|---|---|
Works without install | Partially (unless build system files are modified) | No | No |
Requirements (for build) | shell, make | CMake (installed), make | SCons (installed) |
Requirements (for the tool itself) | perl | C++, libarchive, curl, expat | Python 2 (3.x not supported) |
Build system file format | shell + m4, make with extensions | Custom | Python scripts |
Common features
Description | Autotools | CMake | SCons |
---|---|---|---|
Respecting build environment (CC, CFLAGS, LDFLAGS...) | Yes | Yes | When supported by the package |
Respecting install paths (bindir, libdir...) | Yes | When supported by the package | When supported by the package |
Straightforward (template) install for packages without libraries | Yes | Yes | No |
Straightforward (template) install for packages with libraries | Yes | No | No |
Ability to build libraries | Yes | Yes | Without SONAMEs |
Separated configuration from build | Yes | Yes | No |
Parallel build support | Yes | Yes | Yes |
Configuration cache support | Yes | No | Yes |
Ability to build source packages | Yes | When supported by the package via CPack | When supported by the package |
Ability to build binary packages | No | When supported by the package via CPack | When supported by the package |
Support for out-of-source builds | Yes | Yes | When supported by the package |
Modifying build system files without reconf | No | Yes | Yes |
Note
When supported by the package usually means that the build system provides methods to solve the problem but requires users to explicitly use/enable/alias them in their build system files.
When supported by the package usually means that the build system provides methods to solve the problem but requires users to explicitly use/enable/alias them in their build system files.