Por lo tanto, a juzgar solo por los criterios establecidos en la pregunta, el sistema de compilación que parece ser el más adecuado probablemente sea waf - Python puro, proporciona compatibilidad con C++ y otros lenguajes, general, poderoso, no DSL.
Sin embargo, desde mi experiencia personal, prefiero CMake para proyectos de C++. (Probé CMake, SCons y waf, y me gustaron más o menos en ese orden). CMake es una solución general, pero tiene soporte integrado para C++ que lo hace más agradable que una solución más genérica cuando en realidad estás haciendo C++.
El modelo de compilación de CMake para C++ es más declarativo y menos imperativo, y por lo tanto, para mí, más fácil de usar.La sintaxis del lenguaje CMake no es excelente, pero una compilación declarativa con una sintaxis impar supera una construcción imperativa en Python. De los tres, CMake también parece tener el mejor soporte para cosas "avanzadas" como encabezados precompilados. La configuración de encabezados precompilados redujo el tiempo de reconstrucción en aproximadamente un 70%.
Otras ventajas para CMake incluyen documentación decente y una comunidad considerable. Muchas bibliotecas de código abierto tienen archivos de compilación CMake en el árbol o proporcionados por la comunidad CMake. Hay proyectos importantes que ya usan CMake (OGRE viene a la mente), y otros proyectos importantes, como Boost y LLVM, están en proceso de mudarse a CMake.
Parte del problema que encontré al experimentar con los sistemas de compilación es que estaba tratando de crear un complemento NPAPI en OS X, y resulta que muy pocos sistemas de compilación están configurados para darle a XCode la combinación exacta de indicadores requerida para hacerlo CMake, reconociendo que XCode es un objetivo complejo y en movimiento, proporciona un gancho para establecer manualmente los comandos en los proyectos XCode generados (y en Visual Studio, creo). Esto es muy inteligente en lo que a mí respecta.
Si está creando una biblioteca o una aplicación también puede determinar qué sistema de compilación es mejor. Boost aún utiliza un sistema basado en mermas, en parte porque brinda el soporte más completo para administrar tipos de compilación que son más complejos que "Depurar" y "Liberar". La mayoría de las bibliotecas de refuerzo tienen cinco o seis versiones diferentes, especialmente en Windows, anticipando que las personas necesitan bibliotecas compatibles que vinculen con diferentes versiones del CRT.
No tuve ningún problema con CMake en Windows, pero por supuesto su kilometraje puede variar. Hay una GUI decente para configurar dependencias de compilación, aunque es complicado utilizarla para las reconstrucciones. Afortunadamente, también hay un cliente de línea de comandos. Lo que he decidido hasta ahora es tener un Makefile de envoltura delgada que invoque a CMake desde un objdir; CMake luego genera Makefiles en el objdir, y el Makefile original los usa para hacer la compilación. Esto garantiza que las personas no invoquen accidentalmente CMake desde el directorio de origen y llenen su repositorio. ¡Combinado con MinGW, este "sándwich CMake" proporciona una experiencia de construcción multiplataforma notablemente consistente!
Estoy confundido. Usted dice "no es necesario que admita el conjunto completo de autotools". ¿Esto significa que su pregunta debe reformularse: "¿Cuál es el siguiente mejor sistema de compilación después de autoconf/automake?" –
@William Pursell: No. Estoy dejando de lado explícitamente el requisito de compatibilidad con autoconf y automake, ya que está estrechamente vinculado a Makefiles. –
No veo nada malo con la pregunta original o la discusión resultante. Dado que esta pregunta ahora es el principal motor de búsqueda de "mejor sistema de compilación", esta pregunta debe reabrirse. Podría entender cerrarlo si la discusión hubiera sido realmente obstinada, o si realmente hubiera atraído spam, pero ese no es el caso. – user1110743