python - Elegir entre Scons y Waf en grandes proyectos
caching build-tools (3)
En el pasado, SCons no tenía el mismo rendimiento, pero desde entonces se han agregado muchas mejoras.
Me gustan ambas opciones y tuve que tomar la misma decisión hace unos 6 meses. Fui con SCons ya que parece tener una base de usuarios y soporte más grande.
Here hay un enlace útil que compara SCons con otras herramientas de construcción.
Estamos pensando en convertir un proyecto realmente grande de usar GNU Make a una herramienta de compilación más moderna. Mi sugerencia actual es usar SCons o Waf.
Actualmente:
- Los tiempos de construcción son alrededor de 15 minutos.
- Alrededor de 100 desarrolladores.
- Aproximadamente el 10 por ciento del código es C / C ++ / Fortran el resto es Ada (usando gnatmake).
Las esperanzas / ganancias potenciales en mejoras son
- Caché de compilador compartido para reducir los tiempos de compilación y requiere espacio en disco
- Mantenimiento más fácil
¿SCons escala bien para esta tarea? He visto comentarios sobre él que no están escalando tan bien como Waf. Esos son sin embargo un par de años. ¿Han ganado los scons en rendimiento los últimos años? Si no, cuál es la razón de su mal desempeño en comparación con Waf.
Personalmente prefiero Waf porque es más flexible y no tiene el problema del directorio de variantes.
Waf
Pros:
- Directorio de variantes separadas; no desordenes tu carpeta de origen con archivos de objetos (SCons también tiene esto, pero no está activado de forma predeterminada y requiere algunos intentos para comenzar a trabajar)
- Muy flexible
- Clasificación automática de dependencias
- Funciona en muchas versiones de Python (CPython 2, CPython 3, Jython y PyPy)
- Lo distribuyes con tu aplicación, por lo que los usuarios solo necesitan Python.
Contras:
- Un dolor para extender
- Horriblemente poco documentado (aunque los ejemplos ayudan)
- No diferencia bien entre GCC y Clang (no estoy seguro si SCons también tiene ese problema)
Scons
Pros:
- Mucho más simple que Waf
- Más fácil de extender que Waf (ver here )
- Algo mejor documentado
Contras:
- Problemas de escalabilidad (Tenga en cuenta que SCons no es realmente tan malo , comprarlo se vuelve un poco más lento a medida que aumenta el tamaño)
- Feo (esto es 100% opinión personal)
Línea de fondo
Depende de lo que estés buscando. En general, Waf parece ser muy bueno en la gestión de proyectos grandes (y no solo por la velocidad), pero si necesita extenderlo, busque en otro lugar. Por otro lado, SCons es mucho más fácil de usar.
Si decide ir con Waf, solo publique sus problemas en la lista de correo .
He estado desarrollando una cadena de herramientas para nuestra compañía que está construida alrededor de waf
. Se dirige a Fedora, Ubuntu, Arch, Windows, Mac OSX y se implementará en nuestros dispositivos integrados haciendo una compilación cruzada en varios hosts.
Hemos descubierto que la forma en que waf
permite la waf
contenida a través de las herramientas, características y otros métodos ha hecho que sea increíblemente fácil de personalizar y ampliar para nuestros proyectos.
Personalmente, creo que es brillante y encontrarlo abstrae bien las interfaces a diferentes herramientas que están integradas.
Desafortunadamente, no tengo mucha experiencia con Scons, pero sí con GNU Make / Autotools. Nuestra decisión de ir con waf
después de evaluar las herramientas de compilación fue que necesitábamos algo que funcionara bien en todas partes, lo que hizo que Python respaldara nuestra herramienta de compilación y que fue rápida. Basé mi decisión en estos resultados y partí de allí.