Alternativa a make en código python que ofrece una serie de funciones mejoradas, como la generación automática de dependencias y la compatibilidad con la caché de compilación integrada. Analiza los includes y deduce qué archivos se deben recompilar cuando cambian, almacena resultados compilados y evita recompilaciones innecesarias entre diferentes proyectos, todo código en Python: construir, analizar, reconfigurar, serializar el estado de construcción, se pueden crear ejecutables, librerías estáticas, compartidas, etc. y se integra bien con normas de empaquetado por ejemplo, para crear Debian packages.
Un ejemplo:
$ mkdir -p pruebas_scons/src
$ cd pruebas_scons/
$ nano SConstruct
# Ruta del código fuente
src_dir = 'src'
# Crear entorno con flags C++17 y advertencias
env = Environment(
CC='g++',
CXX='g++',
CXXFLAGS=['-std=c++17', '-Wall', '-Wextra'],
CPPPATH=[src_dir], # incluir /src
)
# Declaramos que queremos un ejecutable llamado linux
env.Program(target='linux', source=[f'{src_dir}/main.cpp'])
$ nano src/main.cpp`
#include <iostream>
int main() {
std::cout << "¡Linux es un sistema genial!\n";
return 0;
}
$ scons
$ scons -Q
$ scons -n
$ scons -c
$ scons -j4