In this part of the series, I demonstrate the use of interface libraries for managing compiler configuration flags. I also introduce the include command.

In this part of the series, I demonstrate the use of interface libraries for managing compiler configuration flags. I also introduce the include command.
CMake exposes a large set of built-in variables that provide the user with information about the project’s structure. Some of these variables – like CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR – may seem redundant, and the choice between the two not immediately obvious. In this post, I attempt to define a small set of guidelines that should help choose the right variable in a given context.
What is modular design in the context of CMake targets? Let’s discuss how to achieve modularization and why is it important.
CMake provides the most basic abstraction facilities – functions and macros. In this post, I discuss how to use both, with an example of utilizing cmake_parse_arguments to achieve built-in-like interfaces.
Part 3 of the series expands on the concept of target properties and the closely related PRIVATE, INTERFACE and PUBLIC keywords
In this post we explore a piece of testing utility code that can make writing tests for multithreaded code a little less cumbersome. The implementation involves a dash of metaprogramming. You have been warned.
In the second part of the series we discuss the basics of defining and using libraries.
CMake is the predominant meta build system used for C++ projects, making it a required tool in every C++ developer’s skill set. Let’s review some of the fundamental concepts.
Welcome to my programming blog!