
High-efficiency: template-based C++ provides a way to write algorithms in a very abstract way with zero or almost zero overhead (abstraction without the cost!).
#Cmake vs waf code#
Sferes2): we want to focus on the ‘real code’, and avoid writing interface code as much as possible

Also, keep in mind that QT needs a build system that works very well on MS Windows, while we do not care (we have no Windows-based clusters and no Windows-based robots…).

For instance, I remember that no build system was perfect for QT and someone even made a waf-based version of QT.
#Cmake vs waf software#
Overall, it seems that cmake won the “war” in the free software world, mainly because a few high-profile projects chose it instead of Scons or Waf – the most prominent (and “contagious”) project is most probably QT. See Using Limbo as an environment for scientific experiments. More importantly, using python also allows us to easily add services that is not typically part of a build system, for instance, to submit jobs to a cluster (we have to parse a JSON file, etc., which is trivial in python, but not in Cmake!). It is based on Python, it has a nice modern feel, it is fast, and it parallelizes the builds by default. Waf has all the advantages of Scons but the learning curve was less steep. In addition, Scons does not generate makefiles, which makes it faster and more adapted to parallel builds. It makes it easy to build complex build frameworks, but simple things can be not-that-simple to do (at least, in 2007, it probably improved since then). Scons is nice because it is based on Python, a nice, general purpose language that almost everybody know.

an ARM-based Raspberry Pi or a robot) was very hard with the first versions of Cmake (whereas it was easy with Autoconf / Automake!). On the contrary, cross-compiling for embedded platforms (e.g.
#Cmake vs waf windows#
Compiling on both Unix and MS Windows is easy, but Windows is not our target platform. Generating makefiles is nice, but (1) it is slow (because generating files is slow), (2) it is a 40 year old syntax (which does the job, OK), and (3) it is not designed for parallel build (whereas all our computers are now multi-core).
