c++ development environment
Table of Contents
1. Introduction
This describes my personal development environment. It focuses on productive C++-oriented development.
1.1. Goals
- portable development environment
- editor with LSP support
- Integrate compiled c++ libraries with python and jupyter notebooks.
- Communicate with browser-based front ends.
- Reliable and composable build system. Want it to be easy to introduce new libraries, with an arbitrarily elaborate dependecy graph
- Reproducible builds.
- so it's easy to transfer/replicate development environment on another host
- to mitigate bitrot
- Unit tests with code coverage
- Continuous Integration (CI)
2. Summary
Will be using the following components
2.1. Development Stack
component | solution |
---|---|
o/s independent package manager | nix |
editor | emacs |
document generator | org-mode |
compiler | gcc |
language server | lsp + clangd |
version control | git |
continuous integration (CI) | github actions |
containers | docker |
cloud provider | digital ocean |
2.2. Build Stack
component | solution |
---|---|
c++ build | cmake + custom modules |
c++ unit tests | ctest + catch2 |
c++ code coverage | gcov + lcov |
reproducible build | nix + flakes |
documentation | sphinx |
2.3. C++ Library Stack
using these c++ libraries
component | solution |
---|---|
unit tests | catch2 |
general purpose | boost |
python integration | pybind11 |
c++/browser communication | websocket |