Is Meson really faster than CMake?
This question came up on reddit yesterday, since many projects have been porting their build system to Meson (most of them from autotools, some from CMake). Someone said that Meson provides supposedly faster build times than CMake and I was quite surprised to hear that. So I decided to test on my own.
I used libqmatrixclient as test project, since it’s not a trivial hello-world app yet not the most complex project ever. It builds a C++ (static) library and a little example app that links to that library.
libqmatrixclient uses CMake, but I stripped down its CMakeLists.txt just to be sure to compare a minimal CMake configuration with a minimal Meson configuration. The test has been performed with the ninja
backend.
What I found out is that Meson’s build time is actually higher than CMake’s. I cannot claim this is true in general, but it surely shows that Meson is not perfect and probably not “faster” than CMake, in general.
Configuration times
The elapsed time of the configuration step is not really relevant, since you usually run it only once. But anyway here we go:
while with Meson:
According to this first test, Meson is faster than CMake to configure the demo project. For the record, CMake generates a 435 LOC build.ninja
file, while Meson’s build.ninja
is only 289 LOC. At the end of the configuration step, there are 21 files in the CMake build folder and 10 files in the Meson build folder. CMake also generates a rules.ninja
file (83 LOC) that is included in build.ninja
, while Meson doesn’t.
Again, I don’t think the configuration step is that relevant, so let’s move on to what actually matters: build times.
Build times
This is where CMake performs better than Meson. When I run ninja
from the CMake build folder I get:
If I run ninja
from the Meson build folder instead:
In both cases we built a static library and a simple executable linking to that library. In both cases we performed a debug build.
Despite CMake having a bigger build.ninja
, the CMake build takes 2 seconds less than the Meson build (13.3% faster). Not negligible, in my opinion.
I don’t know why this happens, my best guess is that CMake has a better ninja generator (which would make sense since CMake is older).
While it is probably true that Meson is “faster” than autotools, this simple experiment shows that we probably cannot say the same with CMake (or modern CMake, at least).