Quindi, a giudicare esclusivamente dai criteri indicati nella domanda, il sistema di compilazione che sembra il migliore è probabilmente waf - Python puro, fornisce supporto per C++ e altri linguaggi, generale, potente, non un DSL.
Tuttavia, dalla mia esperienza personale, preferisco CMake per i progetti C++. (Ho provato CMake, SCons e waf, e li ho graditi all'incirca in questo ordine). CMake è una soluzione generale, ma ha il supporto integrato per C++ che lo rende più carino di una soluzione più generica quando stai facendo C++.
Il modello di build di CMake per C++ è più dichiarativo e meno imperativo, e quindi, per me, più facile da usare.La sintassi del linguaggio CMake non è grande, ma una build dichiarativa con sintassi dispari batte una build imperativa in Python. Dei tre, anche CMake sembra avere il miglior supporto per cose "avanzate" come intestazioni precompilate. L'impostazione di intestazioni precompilate ha ridotto il mio tempo di ricostruzione di circa il 70%.
Altri vantaggi per CMake includono una documentazione decente e una comunità considerevole. Molte librerie open source hanno CMake per creare file in-tree o forniti dalla comunità di CMake. Ci sono progetti importanti che già usano CMake (mi viene in mente OGRE), e altri progetti importanti, come Boost e LLVM, sono in procinto di passare a CMake.
Parte del problema che ho riscontrato durante l'esperimento con i sistemi di build è che stavo cercando di creare un plug-in NPAPI su OS X, e risulta che sono stati impostati pochissimi sistemi di compilazione per dare a XCode la combinazione esatta di bandiere richieste fare così. CMake, riconoscendo che XCode è un bersaglio complesso e in movimento, fornisce un aggancio per l'impostazione manuale dei comandi nei progetti XCode generati (e Visual Studio, penso). Questo è molto intelligente per quanto mi riguarda.
Se si sta costruendo una libreria o un'applicazione può anche determinare quale sistema di generazione è il migliore. Boost utilizza ancora un sistema basato su jam, in parte perché fornisce il supporto più completo per la gestione dei tipi di build più complessi di "Debug" e "Release". La maggior parte delle librerie di boost ha cinque o sei versioni diverse, specialmente su Windows, che anticipano le persone che necessitano di librerie compatibili che si collegano a versioni diverse del CRT.
Non ho avuto problemi con CMake su Windows, ma ovviamente il tuo chilometraggio può variare. C'è una GUI decente per l'impostazione delle dipendenze di build, anche se è goffo da usare per le ricostruzioni. Fortunatamente c'è anche un client da riga di comando. Quello su cui mi sono accontentato finora è avere un Makefile wrapper sottile che invochi CMake da un objdir; CMake quindi genera Makefile nell'oggjdir e il Makefile originale li usa per creare la build. Ciò garantisce che le persone non invochino accidentalmente CMake dalla directory di origine e ingombrino il loro repository. Combinato con MinGW, questo "sandwich CMake" offre un'esperienza di costruzione cross-platform notevolmente coerente!
Sono confuso. Dici "non è necessario supportare la suite completa di autotools". Questo significa che la tua domanda dovrebbe essere riformulata: "Qual è il prossimo miglior sistema di build dopo autoconf/automake?" –
@William Pursell: No. Esprimo esplicitamente il requisito di supportare autoconf e automake, poiché è strettamente associato a Makefiles. –
Non vedo nulla di sbagliato nella domanda originale o nella discussione che ne risulta. Dato che questa domanda è ora il principale motore di ricerca per "best build system", questa domanda dovrebbe essere riaperta. Potrei capire di chiuderlo se la discussione fosse stata effettivamente formulata, o se avesse effettivamente attratto lo spam, ma non è così. – user1110743