One of the most common complaints about CMake is the lack of good learning materials. Sure, the reference documentation is thorough, but it is only really helpful when you already know what you are looking for. It’s a piece of software with a lot of hidden details and a lot of legacy badness out there. This badness perpetuates via old, outdated, or just plain bad material out there to learn from: StackOverflow answers, forum posts, legacy software that was hacked together, and much more. There is a void of good learning materials.

There are quite a few one-off pieces around the internet: Conference talks, blog posts, and small tutorials that teach good CMake practices, but nothing exhaustive and ongoing.

I’ve accumulated a lot of CMake knowledge over the past few years, and I’ve worked with people in solving their CMake-related problems, and often been told I should record this knowledge for others to find. I’m not unique, of course: there are many people out there with a good depth of knowledge. The problem: They don’t have a ton of free time, and teaching build systems is not as glamorous as “real” programming.

Good news: I have a lot of free time.

Enter: How to CMake Good

Why the weird name? No good reason. I guess I’m following in the footsteps of some other learning materials on using choppy English in their name. Whatever.

Well, I have some good news and I have some bad news.

The good news: I’m teaching via video.

The bad news: I’m teaching via video.

I know, I know: A lot of people out there hate learning by video. I sympathize. Video can be a terrible way to learn a topic. But it can also be quite good: You, a viewer, can see in real-time as someone walks through a process. You can hear their voice and inflection, you can see the examples run, and you can view the material communally if you so desire. Mistakes and typos will not pass through because they will prevent the video from continuing.

I know it’s not preferred for many people, but I’ve personally found video to be one of my favorite ways to learn. Everyone has different preferred learning styles, and that’s okay.

How will this work?

All of How to CMake Good will be recorded with desktop video and a live voice track describing and explaining the processes being shown. The videos will be subdivided with a number for each sub-topic and a letter for sequencing.

Part zero videos will describe meta-topics, such as obtaining and working with CMake and CMake-related tooling.

Part one videos will be the real meat-and-potatoes of working with CMake and creating projects.

Part two videos will talk about the CMake scripting language and how to master it.

Part three+ videos are TBD as of this writing.

All the videos will be posted to YouTube, and the video description will provide any addenda or errata to the video. I’ll be checking the comments for questions and general feedback.

An upload schedule?


I hope to get a video posted at least once a week, but there are no promises.

Do you make money on this?

At the moment, no. I’ve received at least one request on the CMake Tools GitHub to permit donation to that project, and I’ve considered that it may be good to open myself up to crowd-funding that might find the ability to dedicate more time to my open-source work and educational materials. I don’t know what the interest level might look like yet.

Where can I find this?

There are currently eight videos uploaded on my YouTube channel. The basics of obtaining and using CMake are already covered. The channel “Uploads” are ordered incorrectly, so you may prefer to view them in the How to CMake Good playlist , which I’ve ordered by hand.

The videos are all licensed under the Creative Commons Attribution (CC-BY) license, so re-uploads and re-hosting are allowed under the terms of that license.

How can I help?

I’m all new to this “recording myself”, “making tutorials,” and “public speaking” thing. I’d greatly appreciate any feedback on the material, either in a YouTube comment, private message, or email. I’m always present on the C++ Slack and will happily respond for any question or comments.

And finally, I’ll drop that link to the playlist once again.