What is CMake? Build System or Build Tool?

I’m a newbie when it comes to programming so building code on multiple platforms is quite foreign to me. I’m presently trying to understand the difference between a build tool and a build system.

I found one site that describes CMake as a build system. Wikipedia suggests that CMake is not a build system but a build tool. Reading Craig’s book “Professional CMake - A Practical Guide” at the start of Chapter 2 suggests that it’s a build system. Is wikipedia wrong? Sounds like it to me.

Even if someone enlightens me on this, I’m still unsure of exactly what a build tool and a build system is or what they do. Googling seems to show up the two terms used interchangeably. I’m quite confused.

Can anyone help me clear things up?


CMake is a build system generator. It generates input files for build systems (like make, ninja, etc) and IDEs (project files for XCode, Visual Studio, CodeBlocks…).

A build tool’s responsibility is turning code into binary. So to this category belong compilers, linkers, etc.

@alex actually wrote a blog about this topic:

1 Like