Introducing
The Slant team built an AI & it’s awesome
Find the best product instantly
Add to Chrome
Add to Edge
Add to Firefox
Add to Opera
Add to Brave
Add to Safari
Try it now
4.7 star rating
0
Development
Linux
C++
Compiler
What are the best open-source build systems for C/C++?
20
Options
Considered
357
User
Recs.
Jan 23, 2024
Last
Updated
Related Questions
Activity
Have feedback or ideas?
Join our community
on Discord
Ad
20
Options
Considered
Best open-source build systems for C/C++
Price
Platforms
Technology
68
Ninja
-
Windows, Linux, Mac
-
60
CMake
-
Windows, Linux, Mac
-
54
GNU Make
-
Unix, Linux, Windows, Mac
-
--
Premake
-
Windows, Linux, Mac
-
--
Tup
-
Windows, Linux, Mac
-
See Full List
68
Ninja
My Rec
ommendation
for
Ninja
My Recommendation for
Ninja
All
9
Pros
7
Cons
1
Specs
Top
Pro
•••
Fast
See More
Top
Con
•••
Little user choice in organization
Since most of the code and folder structure are automatically generated, this leaves little room to the developer on how they will organize their project.
See More
Specs
Platforms:
Windows, Linux, Mac
Top
Pro
•••
Easy to learn
The syntax of .ninja files is simple and very well documented. The sources of the build system itself are clean and nicely written.
See More
Top
Pro
•••
Easy horizontal scaling
Ninja is stateless by design. This makes horizontal scaling very easy and just a matter of adding servers.
See More
Top
Pro
•••
Simple set up
Once dependencies like Maven are installed, it is up and running in minutes with one simple command.
See More
Top
Pro
•••
Easy integration with CMake
See More
Top
Pro
•••
Can be used as a low level build system from Meson.
See More
Top
Pro
•••
Visual Studio support
Supported in Visual Studio 2019 version 16.7.0 and higher
See More
Hide
See All
Get it
here
Recommend
43
2
60
CMake
My Rec
ommendation
for
CMake
My Recommendation for
CMake
All
28
Experiences
3
Pros
14
Cons
10
Specs
Top
Pro
•••
Can generate project files for popular IDEs
See More
Top
Con
•••
Weird DSL
Hard to maintain when CMakeLists.txt becomes larger.
See More
AdaptableAtai's Experience
It not only powerful but also universal
See More
Specs
Platforms:
Windows, Linux, Mac
Top
Pro
•••
Cross-platform
See More
Top
Con
•••
Non-trivial dependency management
It is hard to find one good way to manage all dependencies.
See More
VivaciousKrotos's Experience
It takes a bit of getting used to as you're learning another programming language, but holy cow is it incredible once you do. I can make my projects automatically configure, build, install, and test with CMake.
See More
Top
Pro
•••
Can create and manage different generators such as Ninja, Makefile, JOM, XCode, KDevelop, Visual Studio, and Code::Block
See More
Top
Con
•••
Very hard to learn
There is an old way and a new way to write it. These are not documented well and this makes it hard to find examples/tutorials online as you're never sure which style its using
See More
EfficientZarik's Experience
Bit of a learning curve, but its modularity and configurability always turn out to be powerful tools in your C/C++ toolbelt.
See More
Top
Pro
•••
Easily finds 3rd-party dependencies and external libs by `find_package()`
See More
Top
Con
•••
Hard to remember lots of commands and arguments
It's hard to write a complex set of cmake files for a large project from scratch without constantly referring to documentations or google even for experienced users.
See More
Top
Pro
•••
Compatible with different IDE's
This way everyone can use their favorite IDE in order to develop CMake, Code Blocks, qtcreator, Visual Studio, (and more).
See More
Top
Con
•••
Uses own language
See More
Top
Pro
•••
Packaging system
You can easily create a package file and link another project to your package.
See More
Top
Con
•••
Bad UX
Bad UX due to many implicit behaviors, making it very hard to get an accurate mental model of what is happening.
See More
Top
Pro
•••
Different targets (library, executable) into one single CMakeLists
Unlike qmake, the cmake can build many targets by just one CMakeLists.
See More
Top
Con
•••
Technical debt
The cmake itself suffers from technical debt and also let the users shoot themselves in the foot by writing quick / dirty hacks. This may lead into huge headache when the project scales or is exposed into more platforms.
See More
Top
Pro
•••
Built-in, cross-platform dependency finding
See More
Top
Con
•••
Extremely slow
Takes a very long time. In projects consisting of multiple independent packages (e.g. ROS projects), CMake can take more time than the actual compilation or running of unit tests.
See More
Top
Pro
•••
The most common tool
If you run into a problem you can find it easily by searching on the internet.
See More
Top
Con
•••
Case-sensivity
Commands are not case sensitive, but arguments and variables are. The scripts ends up looking ugly. ex: package_FOUND or libcrypto_INCLUDE_DIRS
See More
Top
Pro
•••
Can do 'out-of-source' build
Usually, make puts resulting binaries in the same place where it finds sources. In cmake, the recommended way to build is 'out-of-source' — put the product somewhere else. This allows to keep the source tree clean and use faster storage for building (like ramdisks). For more information, visit here.
See More
Top
Con
•••
no "make uninstall"
Unlike autotools or meson, cmake does not provide an "uninstall" target.
See More
Top
Pro
•••
CTest: simply automates testing and integrates it with build system
See More
Top
Pro
•••
Convenient tools for configuring source tree and adjusting build options
With CMake, one can easily customize the build and install process by introducing many option()s or making custom config.h by configure_file(). ccmake is also a handy tool to manage these options.
See More
Top
Pro
•••
Powerful commands to manage the installation process of projects
It also helps the other users to easily integrate CMake projects into their own.
See More
Top
Pro
•••
Out-of-the-box GUI available
CMake comes with the fantastic ncurses GUI ccmake out of the box. Large codebases including WeeChat use it, to the point that the developer never needs to touch CMake code, but it is highly readable if he wishes to examine it.
See More
Hide
See All
Get it
here
Recommend
80
33
54
GNU Make
My Rec
ommendation
for
GNU Make
My Recommendation for
GNU Make
All
16
Experiences
2
Pros
8
Cons
5
Specs
Top
Pro
•••
Not limited to building packages 
GNU Make is not limited to making packages only. It can also be used to install or remove a package, generate tags for it or anything else that can and should be done programmatically.
See More
Top
Con
•••
Doesn't run on Windows by default
Make requires Cygwin/msys2/MinGW/GnuWin32 to run on Windows.
See More
DedicatedSif's Experience
Ubiquitous, bullet-proof, and standard. The learning curve may be a tad steep, but it does everything and does everything well.
See More
Specs
Platforms:
Unix, Linux, Windows, Mac
Top
Pro
•••
Robust and flexible utility
Very useful for simultaneous cross compilation for multiple targets simultaneously. Easy to customize build flags depending of targets/target files/external flags/computational results. Suffix based Rules for build chains.
See More
Top
Con
•••
Steep learning curve
The learning curve is rather steep and the documentation could be improved. If it weren't for the wealth of free software projects that help demonstrate how the tool can and should be used, the task of picking autotools would be very hard.
See More
TirelessLelantos's Experience
The best build system... Supports all language.... easy to maintain. Very flexible and intelligent while building.(Does not build more than once when there is no change in its source)...
See More
Top
Pro
•••
Build process is easy 
With Make it's easy for the user that wants to compile a project to do so. All that they need to do is run make and GNU Make will take care of the rest without the user even needing to know what's happening.
See More
Top
Con
•••
Hard to debug
Common bugs are silent in make, such as mispelled variable names or wrong dependencies. Several features make it easy to shoot yourself in the foot, such as target specific variables, which are carried over to dependencies of that target.
See More
Top
Pro
•••
No need for wrapper modules
Other build tools need wrapper modules to do certain tasks. The biggest disadvantage of these wrapper modules is that they bind you to a version of that tool. With Make you don't have that problem, there's no need for wrappers and no tools to bind you to a version, you can use any version of Make that you want.
See More
Top
Con
•••
Recursive make 
"Recursive make" is a common makefile coding pattern which is used to invoke another session of make. Since a session of make only read in one top-level makefile, this is an easy and natural way to build makefiles for projects made of several submodules. But this pattern causes a lot of problems mainly that you need to partition the dependency tree into several smaller trees. This prevents dependencies from being expressed correctly between instances. This also causes parts of the dependency tree to be calculated multiple times which makes performance suffer. This and many other problems related to recursive make are explained very well in a classic article called Recursive Make Considered Harmful.
See More
Top
Pro
•••
Uses the full power of the UNIX shell
Make takes advantage of the powerful UNIX shell, using it at it's full potential. STDIN and STDOUT are especially useful because of their versatility.
See More
Top
Con
•••
Tabs
See More
Top
Pro
•••
Works with more than just node.js
Since it's written in C and can be found in all UNIX-based systems it can be used on platforms other than node.js.
See More
Top
Pro
•••
Just need to know some UNIX shell commands to get started
It executes UNIX shell commands only so no need to learn a new DSL.
See More
Top
Pro
•••
Well integrated into autotools
If you need support for building releases, detecting system capabilities, and running a full test suite on your release tarball to ensure that it actually works, then you can easily switch up to full GNU automake and autoconf.
See More
Hide
See All
Get it
here
Recommend
37
6
--
Premake
My Rec
ommendation
for
Premake
My Recommendation for
Premake
All
2
Experiences
1
Specs
GenerousIpabog's Experience
Works well, no gimmicks. Uses Lua which beats CMake's DSL any day. There are some inconsistencies with syntax.
See More
Specs
Platforms:
Windows, Linux, Mac
Hide
Get it
here
Recommend
20
--
Tup
My Rec
ommendation
for
Tup
My Recommendation for
Tup
All
9
Experiences
1
Pros
5
Cons
2
Specs
Top
Pro
•••
Speed
It is very fast.
See More
Top
Con
•••
Variants not working on Windows
The solution for having different build configuration (think Release/Debug) is broken on Windows.
See More
DaringNyyrikki's Experience
Very good at what it does; pleasant to use. It's a bit specific in what it'll allow, though. I use it for most of my projects.
See More
Specs
Platforms:
Windows, Linux, Mac
Top
Pro
•••
Tidy
It will automatically clean-up old files.
See More
Top
Con
•••
Cannot incrementally modify or delete files
Cannot incrementally modify files (e.g. LaTeX PDF, VISing and LIGHTing Quake maps, which takes the same BSP file as input and output), and will not delete files (e.g. rm build/*.o).
See More
Top
Pro
•••
General
Not bound to C/C++.
See More
Top
Pro
•••
Lua
Tup supports writing build definitions using Lua or Tupfiles.
See More
Top
Pro
•••
Cross platform
Supports Linux, OSX, and Windows.
See More
Hide
See All
Get it
here
Recommend
10
3
--
xmake
My Rec
ommendation
for
xmake
My Recommendation for
xmake
All
2
Experiences
1
Pros
1
Top
Pro
•••
Cross-platform
See More
Ruki Wang's Experience
A cross-platform build utility based on Lua.
See More
Hide
Get it
here
Recommend
17
1
--
Meson
My Rec
ommendation
for
Meson
My Recommendation for
Meson
All
12
Experiences
4
Pros
6
Cons
2
Top
Pro
•••
Readable build definitions
User-friendly, non-Turing complete DSL (http://mesonbuild.com/Tutorial.html).
See More
Top
Con
•••
Poor support for static linking externals
See More
GenerousIpabog's Experience
Utter trash. Can't find library dependencies without pkg-config, so it's completely useless. Stop hiding all the configuration from your users. Also, it won't rerun without you deleting your build directory which is very annoying.
See More
Top
Pro
•••
Simple to get started with
See More
Top
Con
•••
No globbing, files must be explicitly added to a list in the meson build script to be processed
See More
Glek Tarssza's Experience
Wish I could recommend Meson, but the lack of static linking support and the lack of any kind of ability to be extended (due to the lack of functions) makes this a no-go in my books.
See More
Top
Pro
•••
out-of-tree build
See More
AdaptableUaIldak's Experience
This has been one of the easiest way to build cross-platform C/C++ builds, and it actually works really well! It's very easy to get started and it's actually a very sane system compared to the mess that was CMake. Maybe others have found issues, but from my side, I haven't found anything that would change my mind here.
See More
Top
Pro
•••
Multi-platform
See More
TruthfulVerminus's Experience
Not only Meson saved me time compared to CMake, which I have used a lot. It gives me clearer separation, a better workflow, readable options and build files, more targets like sanitizers and precompiled headers and Unity builds out of the box. Also, mixing with other languages is way easier since Meson is designed from the start for this use case. Subprojects and cross compilation are fully supported and do not feel like an afterthought Meson supports its own download service to integrate projects from source, though it does not have so many packages at the moment. That said, you can consume CMake projects from Meson. All in all, the best build system that I have ever tried. I do not say this lightly after having tried Make, CMkar, Scons, Waf and Tup in my own projects.
See More
Top
Pro
•••
A lot of supported languages
Supported languages include C, C++, Fortran, Java, Rust, there are probably other plugins. e.g. D.
See More
Top
Pro
•••
Fast and full _correct_ incremental builds
See More
Hide
See All
Get it
here
Recommend
26
10
--
Bazel
My Rec
ommendation
for
Bazel
My Recommendation for
Bazel
All
15
Experiences
2
Pros
8
Cons
5
Top
Pro
•••
Correct and repeatable builds
Builds only use input files that are explicitly declared in the build specification. On Linux, Bazel runs tools in a sandboxed environment that contain only the minimum necessary files required.
See More
Top
Con
•••
Unflexible
Does not get out of the way, instead tries to enforce some particular project organization, which may or may not fit your problem/taste/anything else.
See More
Slava Savenko's Experience
piece of c.
See More
Top
Pro
•••
Fast even at scale
Even at large scale it's pretty fast (it's based on what Google uses internally for their huge code base).
See More
Top
Con
•••
Huge dependency itself
Pulls other stuff, like Java, Python.
See More
HilariousZipacna's Experience
Slow and designed for one company's use cases (Google). Not even used by most of Google's own open source projects. It is just wildly over-engineered and inflexible for anything else.
See More
Top
Pro
•••
Simple DSL
See More
Top
Con
•••
Too many files generated
See More
Top
Pro
•••
Handles mixed language builds
See More
Top
Con
•••
Counter-intuitive DSL functions/properties
Visibility value of //module:pkg is hard to guess.
See More
Top
Pro
•••
Many plugins
Different languages and libraries via 3rd party plugins.
See More
Top
Con
•••
Unstable
Tried to build Tensorflow with updated Bazel? You may be out of luck, recently it could only be compiled with only a single (and not the most fresh) version of Bazel.
See More
Top
Pro
•••
Supports project management
One can build different pieces of a complex system using only one build command.
See More
Top
Pro
•••
Can rule shell commands
See More
Top
Pro
•••
Loved by Google users
See More
Hide
See All
Get it
here
Recommend
14
3
--
Buck
My Rec
ommendation
for
Buck
My Recommendation for
Buck
All
5
Pros
2
Cons
3
Top
Con
•••
Not available through Linux repositories
Buck is not made available through the official repositories of major Linux distributions such as Debian, which suggests it's an obscure tool with limited adoption and even smaller relevance.
See More
Top
Pro
•••
Wide amount of languages supported out-of-the-box
See More
Top
Con
•••
Small number of plugins
See More
Top
Pro
•••
Simple and intuitive DSL
See More
Top
Con
•••
Somewhat slower than Bazel
Bazel has long first-time run (when it downloads plugins, if applicable) and fast next runs, whilst Buck is always at the same (slower) pace.
See More
Hide
See All
Get it
here
Recommend
3
1
--
Waf
My Rec
ommendation
for
Waf
My Recommendation for
Waf
All
8
Experiences
1
Pros
5
Cons
2
Top
Con
•••
Obfuscated documentation
See More
Top
Pro
•••
Written in Python
You don't have to learn a domain specific syntax. If you know Python, it's a breeze.
See More
NoblePhoebe's Experience
Great tool, using it to build a 100000 line c++ project. Using lots of custom build steps, building for osx and linux.
See More
Top
Con
•••
Non-standard Python
See More
Top
Pro
•••
File changes are tracked based on a hash of their changes not the time stamp
This means that switching branches in git isn't a big deal.
See More
Top
Pro
•••
Very fast
Much faster than its predecessor SCons.
See More
Top
Pro
•••
Fairly easy to extend
See More
Top
Pro
•••
Very simple graph based API
See More
Hide
See All
Get it
here
Recommend
9
1
--
Gradle
My Rec
ommendation
for
Gradle
My Recommendation for
Gradle
All
12
Pros
10
Cons
2
Top
Pro
•••
Powerful DSL
Using Groovy as the programming language, you have a nice and easy DSL, that can become powerful when you need it to be.
See More
Top
Con
•••
Slower than alternatives
It's been written in Java and takes at least 2 seconds to start and say that files are up to date and no action needs to be taken.
See More
Top
Pro
•••
Lots of plugins available
Gradle has hundreds of open source plugins available. This is extremely helpful for users who want to speed up their development.
See More
Top
Con
•••
Java-centric
It says it is language-agnostic and supports C++ out of the box. Technically: yes. In practice, it is a build tool build by Java developers for Java developers and you can really feel it there. It is small things, but there is a lot of them and they can grow into big pains.
See More
Top
Pro
•••
Dependency programming tool
Gradle is a dependency programming tool first and foremost. Gradle will make sure that all declared dependencies are properly executed for every random task that you execute in your setup. The code can be spread across many directories in any kind of file layout.
See More
Top
Pro
•••
Built for continuous delivery
Gradle can be easily integrated with Jenkins to create a continuous delivery pipeline for any Java application.
See More
Top
Pro
•••
IDEA integration
Gradle has full integration with Jetbrains IDEA. IDEA understands multi-module Gradle builds and automatically maintains the IDEA modules within the project. You also have the option to run unit tests with either the built-in JUnit/TestNG test runner, or delegate running the test to Gradle using the same visualization as the built-in runner.
See More
Top
Pro
•••
Eclipse integration
Gradle has full integration with Eclipse through developer tools and plugins.
See More
Top
Pro
•••
Integrates with Maven
Gradle can deploy to remote Maven repositories or even install to your local Maven repo.
See More
Top
Pro
•••
Official Android Studio build tool
Android Studio's build system is an Android plugin for Gradle. What's more is that the Android Gradle plugin can be installed and run even on machines that don't have Android Studio, which enables you to build Android apps everywhere (for example continuous integration servers).
See More
Top
Pro
•••
Convention over configuration
Gradle follows the convention over configuration paradigm in order to make it easier for developers by having already made a number of decisions out of the box.
See More
Top
Pro
•••
Short scripts
Since Gradle does not use XML but it uses it's own DSL based on Groovy, Gradle scripts tend to be shorter than other build tools that use XML. Boilerplate code is also considerably small because it's DSL is designed to solve a specific problem: moving the software through its lifecycle starting from compilation into static analysis and testing, packaging and finally deployment.
See More
Hide
See All
Get it
here
Recommend
7
2
--
Cake
My Rec
ommendation
for
Cake
My Recommendation for
Cake
All
5
Experiences
1
Pros
2
Cons
1
Specs
Top
Pro
•••
Tools support
Standard support for MSBuild, MSTest, xUnit, NUnit, NuGet, ILMerge, WiX and SignTool.
See More
Top
Con
•••
No GUI
Everything is script based, there is no graphical front end.
See More
RickZeeland's Experience
Cross platform build automation system developed in C#. Can be used standalone, or in combination with CI system.
See More
Specs
Platforms:
Windows, Linux, Mac
Technology:
C#
Top
Pro
•••
Cross platform
Windows, Linux and macOS versions available.
See More
Hide
See All
Free
Recommend
1
--
Qbs
My Rec
ommendation
for
Qbs
My Recommendation for
Qbs
All
9
Experiences
1
Pros
7
Cons
1
Top
Pro
•••
Declarative paradigm like js
See More
Top
Con
•••
Small community
See More
EnthusiasticHemithea's Experience
Qbs is the most elegant build system I ever worked with. The language is very easy to learn and to comprehend. Re-using and encapsulating building blocks is straight forward. A lot of unnecessary details are hidden inside the implementation. Dependency tracking is very sophisticated and robust. With Qbs I get to results quickly. A big pro is also its deep integration into Qt Creator. Especially the performance when resolving big projects is good. All in all I must say that CMake looks messy and overly complicated compared to Qbs.
See More
Top
Pro
•••
Well-defined language
See More
Top
Pro
•••
Supports all kinds of toolchains, even for exotic bare-metal architectures
See More
Top
Pro
•••
Cross platform
See More
Top
Pro
•••
Very well-written documentation
See More
Top
Pro
•••
Excellent dependency tracking
See More
Top
Pro
•••
Powerful and easy-to-learn concepts
See More
Hide
See All
Get it
here
Recommend
4
--
Fabricate
My Rec
ommendation
for
Fabricate
My Recommendation for
Fabricate
Hide
Get it
here
Recommend
2
--
Jam
My Rec
ommendation
for
Jam
My Recommendation for
Jam
Hide
Get it
here
Recommend
1
--
aimake
My Rec
ommendation
for
aimake
My Recommendation for
aimake
All
1
Pros
1
Top
Pro
•••
Really small
Aimake consists of a single Perl file.
See More
Hide
Get it
here
Recommend
1
--
Please
My Rec
ommendation
for
Please
My Recommendation for
Please
All
1
Pros
1
Top
Pro
•••
Intuitive syntax and workflow
Much simpler than multi-tier build systems, like Make and Ninja.
See More
Hide
Free
Recommend
2
--
Autotools
My Rec
ommendation
for
Autotools
My Recommendation for
Autotools
All
8
Experiences
1
Pros
4
Cons
3
Top
Con
•••
Perl
Autoconf is dependent on Perl.
See More
Top
Pro
•••
Based on standard tools
It's a standard tool built over standard tools.
See More
DedicatedSif's Experience
A solid tool and a de-facto standard.
See More
Top
Con
•••
Autotools is far too complicated
It seems to add far too much complexity to projects. The build system has a tendency to be more complex than the actual projects that it's being used to build.
See More
Top
Pro
•••
Ubiquitous
It's a well established build system that is ubiquitous in the open source world.
See More
Top
Con
•••
Poor documentation
In spite of its many years of existence, the available documentation leaves much to be desired.
See More
Top
Pro
•••
make distcheck
Build your project, run the tests, create a release tarball, unpack it with read-only sources, build it and run the tests. This should be the minimum standard for every build system, yet it seems hard to reach.
See More
Top
Pro
•••
Basic API for building anything: ./configure; make
The skills you learn for building one language still work when you build something else, even down to creating books for print from emacs org-mode.
See More
Hide
See All
Get it
here
Recommend
3
6
--
Rake
My Rec
ommendation
for
Rake
My Recommendation for
Rake
All
2
Pros
1
Cons
1
Top
Pro
•••
Powerful language
You can write code for your build system in Ruby. While not my choice for general programming, Ruby is powerful and expressive. Given some knowledge of Ruby, you can create powerful Rake extensions that result in your average target only needing a few lines in the rakefile in spite of having complex behaviors (Is the library for public consumption, or only for use within the current repo/tier? Compile certain files on certain platforms? Link to libraries published from other repos? etc.).
See More
Top
Con
•••
Slooooow
For large codebases or with complex extensions, Rake can become quite slow. I'm aware of one codebase on which it can take 15 minutes to determine that no changes have been made and no recompilation is necessary.
See More
Hide
Get it
here
Recommend
1
1
--
SCons
My Rec
ommendation
for
SCons
My Recommendation for
SCons
All
1
Pros
1
Top
Pro
•••
SCons configurations are just Python scripts
See More
Hide
Get it
here
Recommend
1
6
Don't see your favorite option? Add it.
Built By the Slant team
Find the best product instantly.
4.7 star rating
Add to Chrome
Add to Edge
Add to Firefox
Add to Opera
Add to Brave
Add to Safari
Try it now - it's free
One sec!
Are you sure that you want to abandon your hard work?
Delete Work
Continue working
{}
undefined
url next
price drop