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 |