If you are starting a new C++ project, you’re faced with a few difficult decisions. C++ is not a ‘batteries-included’ language, so you need to pick a few technologies before you can start.
Yet worse, the answer to most of the pressing questions is often ‘it depends’ and changing one of the choices mid-project can be very expensive.
Therefore, I have compiled this list to give totally biased and oversimplified to the most important questions. If you want more nuanced answers, feel free to do your own research.
This is meant to be a somewhat amusing starting point.
FAQ
1. Which OS should I pick?
Linux
Rationale
Usually, not a choice you can make yourself – but if you do: dependency management is easier with a package manager, and it seems to be the most dominant OS in the C++ community. Hence you will get the best support and easiest access to technologies.
2. Which build system should I use?
CMake
Rationale
This is what everyone else is using, and those that are not are a real pain. For better or worse, the market is locked in. With target based properties in modern CMake, it’s not even that bad.
3. Which IDE should I choose?
Visual Studio 2017 on Windows, CLion everywhere else.
Rationale
CLion is getting more robust and feature rich with every release. Native CMake support and really cool refactoring capabilities finally make this a valid contender to Visual Studio’s crown. However, the VS debugger is still the best in the game, so VS still comes out on top on Windows – tho not by a huge margin.
4. Which Language version should you use?
C++14
Rationale
C++17 is not quite there yet with library, tool and platform support. Also, people do not really know how to use it well yet. C++14 builds on the now well-established C++11, which a few rather important “fixes” – and support is ubiquitous.
5. Which GUI toolkit should you use?
Qt
Rationale
No other toolkit comes close in maturity. Qt’s signal/slot system almost seamlessly integrates with C++11 lambdas, making the precompile step needed for SLOTs a non-issue. Barring the license costs for closed-source projects, there is really no reason not to use it.
6. Should you use Boost?
No
Rationale
Boost is a huge and clunky dependency that will explode your build times as soon as you even touch it. And it’s ‘viral’ enough that you can distinguish a Boost project from a non-Boost project. Boost.Optional, Boost.Variant and Boost.Filesystem prepare you for a smooth transition to C++17, but there are other more lightweight alternatives available.
Closing thoughts
There you have my totally biased opinion but hopefully entertaining. YMWV, but I think this is a good starting point if you don’t want to exeriment too much.
You’ve suggested Qt, but CLion as IDE… Quite chaotic advice.
Why do you think that? Would you suggest QtCreator?
Of course 🙂 At least it “plays” well with Qt.
I don’t have any friction with Qt and CLion either. In fact, I was using mostly using QtCreator before slowly switching all projects over to CLion. QtCreator is still a viable alternative if you don’t want to buy CLion tho.