[Documentation] Minor changes
Compare changes
<div class="toc"><ul class="toc-item"><li><span><a href="#Introduction" data-toc-modified-id="Introduction-1">Introduction</a></span></li><li><span><a href="#Installing-a-compiler" data-toc-modified-id="Installing-a-compiler-2">Installing a compiler</a></span><ul class="toc-item"><li><span><a href="#Ubuntu-/-Debian" data-toc-modified-id="Ubuntu-/-Debian-2.1">Ubuntu / Debian</a></span><ul class="toc-item"><li><span><a href="#Clang" data-toc-modified-id="Clang-2.1.1">Clang</a></span></li><li><span><a href="#Default-g++" data-toc-modified-id="Default-g++-2.1.2">Default g++</a></span></li><li><span><a href="#More-recent-gcc" data-toc-modified-id="More-recent-gcc-2.1.3">More recent gcc</a></span></li></ul></li><li><span><a href="#Fedora" data-toc-modified-id="Fedora-2.2">Fedora</a></span><ul class="toc-item"><li><span><a href="#g++" data-toc-modified-id="g++-2.2.1">g++</a></span></li><li><span><a href="#clang++" data-toc-modified-id="clang++-2.2.2">clang++</a></span></li></ul></li><li><span><a href="#macOS" data-toc-modified-id="macOS-2.3">macOS</a></span></li></ul></li><li><span><a href="#STL" data-toc-modified-id="STL-3">STL</a></span></li><li><span><a href="#Editor" data-toc-modified-id="Editor-4">Editor</a></span></li><li><span><a href="#Software-configuration-manager" data-toc-modified-id="Software-configuration-manager-5">Software configuration manager</a></span></li><li><span><a href="#Build-system" data-toc-modified-id="Build-system-6">Build system</a></span></li></ul></div>
```
```
However, Ubuntu is rather conservative and the version you get might be a bit dated and it might be problematic if you intend to use the bleeding-edged features from the latest C++ standard (even if it's now better than what it used to be: with Ubuntu 18.04 you get the decent g++-7.3 now and gcc-9.3 with 20.04).
```
```
```
```
```
Just a note for compatibility: `libc++` tends to provide more `include` directive in its header files than `libstdc++`. So don't be astonished if your code compiles well with `libc++` but complains about an unknown symbol from STL with `libstdc++` (and the patch is simply to use the missing include - a tool such as IncludeWhatYouUse would have underlined the missing include even when using `libc++`).
* [Visual Studio Code](https://code.visualstudio.com/), which gained traction in last few years and is one of the most sizeable GitHub project. This is an open-source and multi-platform editor maintained by Microsoft, not to be confused with [Visual Studio](https://visualstudio.microsoft.com/?rr=https%3A%2F%2Fwww.google.com%2F) - also provided by Microsoft on Windows (and with a fee).
Handling properly the compilation of the code is not an easy task: many tutorial skip entirely the topic or just show a very basic example that is very far removed from a real project with potentially many third-party dependencies. This is understandable (and I will mostly do the same): using properly a build system is not trivial and may be the topic on a full lecture of its own.
* [CMake](https://cmake.org) is the build system probably with the more traction now; it is a cross-platform build system which is rather powerful but not that easy to learn. Official documentation is terse; you may try [this](https://cliutils.gitlab.io/modern-cmake/) or [that](https://cgold.readthedocs.io/en/latest/) to understand it better. Please notice CMake was heavily changed when switching from version2 to version 3; take a recent documentation if you want to learn "modern" CMake. The principle of CMake is to provide a generic configuration that may be used for different build tools: by default you generate a Makefile, but you may choose another generator such as Ninja (see below) or a specific IDE.
* [Ninja](https://ninja-build.org) is presented on this website as _a small build system with a focus on speed. It differs from other build systems in two major respects: it is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible_. It is my favorite generator to use with CMake; meson also enables usage of Ninja under the hood.