More Modern CMake - Working with CMake 3.12 and later

Speaker: Deniz Bahadir

Audience level: Beginner | Intermediate


Nowadays, you very often hear about Modern CMake, but do you know what it really stands for. Do you know the difference to Traditional CMake? And do you know, that with the release of CMake 3.12 "More Modern CMake" has already entered the stage?
This release of CMake is a real game changer: It unifies and simplifies the way how build-targets can and should be used even further, so that using CMake should now be an easier (and more fun) experience for everyone.

The term "Modern CMake" came up with the release of CMake 3.0 in 2014 and since then gained popularity. It means a change in usage of CMake. Instead of using variables for keeping track of usage-requirements (as in Traditional CMake), build-targets themselves keep track of usage-requirements and propagate them to their dependents. Modern CMake evolved step-wise from each release of CMake 3.x to the next and with CMake 3.12 some of the biggest left-out tasks were finished. In particular, object library build-targets do no longer require special treatment and can be used as other build-targets, too, and setting dependency-relations between targets became easier in general because some restrictions were lifted.

Now, there is no excuse any more to still postpone the upgrade from Traditional CMake which is more error-prone and more difficult to manage. Whether one never used CMake before or used Traditional CMake or already adopted Modern CMake: Now is the time to adopt More Modern CMake!

In this talk I will present what Modern CMake is and demonstrate the simplifications that were introduced lately and should be used with newer CMake versions which make it even More Modern. Additionally, we will look at some missing features and further improvements that would simplify usage of CMake even more.