Mentioning Bazel and Ninja in the same sentence is a bit odd IMHO. With Bazel actually aiming to do everything itself, while Ninja is a build backend that is supposed to its input files generated. I suppose you're going for CMake generating a Ninja build, which is probably a good approach for this series. After all, CMake is probably the most commonly used build tool for C++. However, I've grown quite fond of Bazel in recent years, so giving an overview there would probably be very useful!
Hey Alex, well, I wouldn't say it's that odd to be honest 🤷. I might, of course, be wrong here, but Ninja is really closest to Make in my view. It is a simple script of dependencies and commands to build them, so in the end it just calls your compiler with certain inputs in a certain sequence. Bazel is not really that much different. It does, of course, a lot more and provides a more abstract way of designing ones build but essentially it still comes down to calling your compiler with a certain set of flags in a certain order. So from this perspective Bazel, Make and Ninja do the same. CMake on the other hand _does not_ call the compiler on its own. It generates the Makefile or a ninja build file (or others) and that's about it. In the next step, the underlying build system still has to be called to actually call the compiler program with the needed inputs. I think the reason why it feels odd is that people keep talking about CMake and Bazel as an "end-to-end" system, while they rarely do so about Make and Ninja and I give you that. But I hope that my logic is not too flawed either. Anyway, we're gonna be using CMake + Make combination in the course as a basis but after that people should have zero issues replacing Make with ninja if they want. Sorry for a lengthy answer :)
What build system are you most interested in? Which one do you hear most about?
Cmake and bazel
CMake for the win.
Interested in Bazel / ninja build systems
Interested in CMake :D
+1 for bazel
Mentioning Bazel and Ninja in the same sentence is a bit odd IMHO. With Bazel actually aiming to do everything itself, while Ninja is a build backend that is supposed to its input files generated. I suppose you're going for CMake generating a Ninja build, which is probably a good approach for this series. After all, CMake is probably the most commonly used build tool for C++. However, I've grown quite fond of Bazel in recent years, so giving an overview there would probably be very useful!
Hey Alex, well, I wouldn't say it's that odd to be honest 🤷. I might, of course, be wrong here, but Ninja is really closest to Make in my view. It is a simple script of dependencies and commands to build them, so in the end it just calls your compiler with certain inputs in a certain sequence. Bazel is not really that much different. It does, of course, a lot more and provides a more abstract way of designing ones build but essentially it still comes down to calling your compiler with a certain set of flags in a certain order. So from this perspective Bazel, Make and Ninja do the same.
CMake on the other hand _does not_ call the compiler on its own. It generates the Makefile or a ninja build file (or others) and that's about it. In the next step, the underlying build system still has to be called to actually call the compiler program with the needed inputs.
I think the reason why it feels odd is that people keep talking about CMake and Bazel as an "end-to-end" system, while they rarely do so about Make and Ninja and I give you that. But I hope that my logic is not too flawed either.
Anyway, we're gonna be using CMake + Make combination in the course as a basis but after that people should have zero issues replacing Make with ninja if they want.
Sorry for a lengthy answer :)
+1 for Bazel
let's do bazel