Boris Kolpackov: The Design of a New C++ Build Toolchain
Channel: CppNow
Date: 18/07/2016

At C++Now 2015 I introduced build2, a new C++ build system. A year later, a lot has happened. Most significantly, there is now a package manager (bpkg), a repository web interface (brep), and a public repository of open source C++ packages, cppget.org. Also, the build system has seen a lot of development. But in this talk I don't want to give you a run down of the new features. Ok, maybe just a short introduction, to set the context. Instead, I would like to talk about interesting problems in the cross-platform C++ building and distribution process, how we decided to tackle them in build2 (and then, I am sure, someone from the audience will tell me why it's all wrong ;-)). What are the interesting problems? Cross-compilation (something is wrong with your build system if it's harder to cross-compile than build natively on Windows), in/out-of-source builds, interaction of generated source code with automatic dependency extraction, or high fidelity builds (what if I changed my compiler options), just to name a few. Seemingly benign decisions, such as relative vs absolute paths, can open (or close) doors to really powerful features, like updating multiple, unrelated projects or even multiple configuration of the same project with a single build tool invocation. A C++ build system also rarely handles just building. There is testing, installation (do we really have to run the whole process as sudo?), and preparation of distributions (no, shipping your .gitignore files is not cool). When it comes to packaging, how do we capture requirements (like C++11 or Linux-only) and conditional dependencies? How do we ensure package authenticity? And what should the submission policies and procedures be for a package repository like cppget.org?

Slides here: https://github.com/boostcon/cppnow_presentations_2016/blob/master/03_friday/the_design_of_a_new_cpp_build_toolchain.pdf
---

*--*

---