Kitware logo with the C++ Now conference logo

Hosted by The Boost Foundation
April 29 – May 3, 2024 in Aspen, Colorado

C++Now is a gathering of C++ experts and enthusiasts from around the world looking to push C++ to its limits. The conference explores what C++ will look like in the future and how it can be used today.

As the primary contributor of CMake, Kitware is an industry expert in using CMake for building C++ code. CMake’s original author and lead architect, Bill Hoffman, is also a co-founder, chairman of the board, vice president, and CTO at Kitware. Bill will be giving a talk during C++Now on the importance of the build system target model. If you are attending the conference, we encourage you to visit this session to hear from Bill and get a chance to ask live questions. If you are unable to attend, you can contact us to learn more about Kitware’s build system expertise.

The importance of the build system target model
Monday, April 29 from 4:30-6 PM MT
Speaker: Bill Hoffman

In the C++ Developer Survey (2023), the top issues all revolve around build-related issues: managing dependencies, setting up CI/CD pipelines, dealing with CMake, setting up toolchains and IDEs, and improving build times. All of these issues can be mitigated with a better understanding of the “target model” and its wider application.

Since 1983, developers have been creating libraries and programs with C++. Initially software was built with makefiles or shell scripts or direct invocation of the compiler. Over time, software complexity has increased leading to a significant rise in the need for reuse. This need led to the development of new build tools like CMake. Early build systems focused primarily on flags leading to tools like pkg-config. In 2012, the KDE/CMake community initiated work on “Modern CMake”. This novel approach centered on creating a graph of nodes (targets) and leveraging graph theory principles, such as topological sorting, to control builds via transitive properties across targets. All modern build systems (CMake, Bazel, Meson, and Bjam) support this “Target model” to some extent. The key of this approach is to allow developers to specify both the information needed to build a target and the information needed for other targets to consume it. This concept and its application are key to unlocking package management, C++ 20 modules and consistent builds for C++.

This talk will explore and explain this model, its history and its importance to the C++ community. Specifically, it will explore its relationship with the development of the Common Package Specification (CPS), dependency management practices, C++ 20 modules, and the maintenance of C++ projects in a sustainable manner. Attendees will come away from the talk with an understanding of this fundamental feature of modern build systems and how its broader application will help solve some of the C++ community’s top complaints.

Leave a Reply