Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Jan Schaffranek

Course Description:

Ready to elevate your C/C++ development skills and gain a professional edge? This course is designed to help you master modern CMake projects, unit testing, continuous integration tools, and more, tailored for your daily C/C++ workflow.Whether you're maintaining existing projects or starting new ones, this course provides the essential tools and techniques for efficient and effective development, ensuring you stay ahead in the competitive field of software engineering.

What You’ll Learn:

Read more

Course Description:

Ready to elevate your C/C++ development skills and gain a professional edge? This course is designed to help you master modern CMake projects, unit testing, continuous integration tools, and more, tailored for your daily C/C++ workflow.Whether you're maintaining existing projects or starting new ones, this course provides the essential tools and techniques for efficient and effective development, ensuring you stay ahead in the competitive field of software engineering.

What You’ll Learn:

  • Software Installation: Set up on Windows, Linux, and Mac.

  • Compiler Compatibility: Works with GCC, Clang, and MSVC compilers.

  • CMake Tutorial: Master libraries, targets, installation, and more.

  • Doxygen Documentation: Generate professional documentation.

  • Package Managers: Use VCPKG and Conan for package management.

  • Unit Testing: Implement unit tests with Catch2.

  • Code Coverage & CI Testing: Ensure robust code with continuous integration.

  • Advanced Tooling: Utilize LTO, Clang-Tidy, Clang-Format, pre-commit, cmake-format.

  • Sanitizers: Run-time checks for your code (e.g. memory leaks).

  • Debugging & Running: Efficiently debug and execute your software.

Why This Course?

  • Comprehensive Learning: Gain practical skills for professional software development.

  • Hands-On Projects: Apply your knowledge with real-world examples.

  • Best Practices: Learn industry-standard practices for C/C++ development.

Step into the future of C/C++ development and become a professional today.

See you in class.

Enroll now

What's inside

Learning objectives

  • Cmake (command line and gui)
  • Create modern c/c++ projects
  • Use external projects via git, conan and vcpkg
  • Automate the html documentation (doxygen)
  • Unit testing with catch2
  • Code coverage of the unit tests
  • Continuous integration with github actions
  • Tooling: clang-format, clang-tidy, cppcheck
  • Tooling: sanitizer, cmake-format, pre-commit
  • Vsccode and vs 2022 with gcc, clang and msvc

Syllabus

Introduction
Windows: Software Installation - Part 1
Windows: Software Installation - Part 2
Linux: Software Installation - Part 1
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Covers modern CMake projects, unit testing, and continuous integration, which are essential for professional C/C++ development workflows
Teaches the use of package managers like VCPKG and Conan, which can streamline dependency management in C/C++ projects
Explores advanced tooling such as LTO, Clang-Tidy, and Clang-Format, which are valuable for optimizing and maintaining code quality
Requires software installation on Windows, Linux, and Mac, which may require learners to have access to multiple operating systems
Works with GCC, Clang, and MSVC compilers, which may require learners to install and configure multiple compilers
Includes sanitizers for run-time code checks, which can help identify memory leaks and other issues during development

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Modern cmake, tests and c++ tooling

According to learners, this course provides a comprehensive overview and practical mastery of essential tooling for modern C/C++ development. Students particularly praise the clear explanations and the abundance of hands-on examples, which make complex topics like CMake, Catch2, VCPKG, Conan, and CI pipelines accessible and applicable. Many found the detailed setup guides for different operating systems and compilers very helpful. While the course is highly relevant for professional developers, it's noted that it assumes prior knowledge of C/C++ and may move too quickly for complete beginners. Overall, it's seen as a valuable resource for elevating C/C++ project management and workflow efficiency.
Course content is current and reflects modern practices.
"Glad the course is updated to the 2024 edition, feels very current and relevant."
"Covers modern CMake practices, which is exactly what I needed for my projects."
"The tooling information feels relevant and up-to-date with industry standards."
Detailed setup guides for multiple OS and compilers.
"The detailed installation guides for Windows, Linux, and Mac were incredibly helpful for setting up the environment."
"Appreciated the effort put into showing setup for different OS and compilers (GCC, Clang, MSVC)."
"Setting up the environment was straightforward thanks to the provided instructions and videos."
Concepts are explained clearly and are easy to grasp.
"The instructor explains complex CMake concepts in a very clear way."
"Even though some topics are advanced, the lectures break them down effectively."
"Found the explanations easy to understand and follow throughout the course."
Hands-on examples and real-world projects are useful.
"The hands-on examples made it easy to follow along and apply the concepts immediately."
"I really liked the project-based approach; it helped solidify my understanding."
"Learned a lot by actually doing the exercises provided in the course."
Covers a wide range of modern C/C++ tools.
"This course covers so many essential tools like CMake, Catch2, VCPKG, Conan, CI... it's very comprehensive."
"I appreciate the breadth of topics covered, from CMake fundamentals to advanced tooling like sanitizers and LTO."
"It provides a great overview of the modern C++ development ecosystem and its essential tools."
Assumes prior knowledge of C/C++. Not for beginners.
"This course is definitely not for C++ beginners; you need to know the language well before starting."
"Found the pace a bit fast at times, especially if you're not already familiar with C++."
"Assumes a certain level of prior programming experience in C or C++."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in CMake, Tests and Tooling for C/C++ Projects [2024 Edition] with these activities:
Review C++ Fundamentals
Strengthen your understanding of C++ fundamentals to better grasp the concepts used in CMake project configuration and tooling.
Show steps
  • Review basic syntax and data structures.
  • Practice writing simple C++ programs.
  • Familiarize yourself with object-oriented principles.
Practice Command-Line Usage
Improve your command-line skills to efficiently use CMake and other build tools covered in the course.
Browse courses on Command Line Interface
Show steps
  • Practice navigating directories and manipulating files.
  • Learn basic command-line utilities like grep, sed, and awk.
  • Write simple shell scripts to automate tasks.
Follow a CMake Tutorial
Work through a CMake tutorial to gain hands-on experience with building C++ projects using CMake.
Show steps
  • Find a comprehensive CMake tutorial online.
  • Follow the tutorial step-by-step, building the example project.
  • Experiment with different CMake commands and options.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Set up a Personal C++ Project with CMake
Apply your CMake knowledge by setting up a build system for your own C++ project.
Show steps
  • Choose a small C++ project to work on.
  • Create a CMakeLists.txt file for your project.
  • Configure the build system and compile your project.
  • Add unit tests using Catch2.
Write a Blog Post on CMake Best Practices
Solidify your understanding of CMake by writing a blog post summarizing best practices for using CMake in C++ projects.
Show steps
  • Research CMake best practices.
  • Outline the key points for your blog post.
  • Write and publish your blog post.
Contribute to a CMake-Based Open Source Project
Deepen your CMake skills by contributing to an open-source project that uses CMake for its build system.
Show steps
  • Find an open-source project that uses CMake.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.
Mastering CMake
Expand your knowledge of CMake with a comprehensive book that covers advanced topics and real-world examples.
View Mastering CMake on Amazon
Show steps
  • Read the book cover to cover.
  • Try out the examples in the book.
  • Take notes on key concepts and techniques.

Career center

Learners who complete CMake, Tests and Tooling for C/C++ Projects [2024 Edition] will develop knowledge and skills that may be useful to these careers:
Build Engineer
A build engineer is responsible for developing and maintaining the build systems and processes for software projects. This course provides a direct and practical route for those looking to excel as a build engineer. The course's focus on CMake is crucial because CMake is a popular build system generator. Build engineers benefit directly from learning how to use CMake effectively, including creating projects, managing libraries, and automating build processes. Given that this course also covers the integration of build systems with testing tools, continuous integration systems, and static analysis programs, this course provides a comprehensive overview of modern build processes.
Software Engineer
A software engineer builds and maintains software applications, and this course directly supports that role. This course on CMake, testing, and tooling for C/C++ projects helps software engineers create robust and maintainable code by focusing on practical skills. This course helps in the use of package managers like VCPKG and Conan, which are essential tools for modern software development. The course's practical approach to unit testing with Catch2, continuous integration with tools like Github Actions, and debugging will directly translate to a software engineer's daily activities. This course is valuable because it covers fundamental aspects of the software development lifecycle.
Game Developer
A game developer creates the software for video games. This course provides game developers with the tools they need to create robust and well-tested game engines and tools. Modern game development requires a strong understanding of C and C++, the languages this course focuses on. The skills in CMake are important for managing the complex build processes of game engines. As game development teams rely on collaboration, this course's material on using version control and development tools helps with ensuring a high level of software quality. This course also provides practical experience with unit testing and continuous integration, which are valuable for any game developer.
Robotics Engineer
A robotics engineer designs and develops robots and robotic systems. This course on CMake, testing, and tooling helps robotics engineers develop reliable and maintainable software for their robots, since these systems often rely on C and C++. This course's focus on CMake is particularly useful as it is a powerful tool for managing software dependencies. The sections on unit testing, continuous integration, and debugging will also be especially useful in the robotics field. Furthermore, the course's emphasis on code quality and best practices directly helps robotics engineers write robust code.
Firmware Engineer
A firmware engineer develops the low-level software that controls hardware devices. A firmware engineer will find this course useful since they often use C and C++ for their projects. The course material on CMake is important because firmware projects require a robust build system. The unit testing and continuous integration lessons directly translate to workflows that firmware engineers will use daily. This course provides insight into modern C/C++ development practices, which are important when working on low-level software.
DevOps Engineer
A DevOps engineer works to bridge the gap between software development and operations. This course may be useful for those wanting to be a DevOps engineer by providing the knowledge necessary to manage software build pipelines. The unit testing, continuous integration and tooling sections of the course are particularly relevant. DevOps engineers often need to work with build systems, test frameworks, and continuous integration tools to automate the software delivery process; the material covered by this course helps one integrate these technologies. This course also covers the use of sanitizers to help to ensure code quality, which is an important aspect of the responsibilities of a DevOps engineer.
Embedded Software Engineer
An embedded software engineer develops software for embedded systems. This course gives embedded software engineers the ability to write and maintain code that will operate on hardware with specific constraints. Embedded software engineers, especially those working with C and C++, need experience with modern build systems and testing tools, so this course may be useful. The course's material on CMake is crucial as engineers need to manage dependencies, cross-compile code, and ensure code quality with unit tests. The course on configuration and external libraries also provides useful information for those in the embedded space. Furthermore, the skills in debugging will be handy when dealing with embedded systems.
High-Performance Computing Engineer
A high performance computing engineer optimizes software for speed and efficiency on large computing systems. This course is useful for a high performance computing engineer because it focuses on efficiency and best practices when developing C/C++ code. The course's coverage of advanced tooling, like Clang-Tidy and sanitizers, helps the engineer optimize code for performance and prevent errors. High performance computing engineers will also find the course's material on build systems to be particularly relevant, since managing dependencies is critical when working on supercomputers.
Computational Scientist
A computational scientist uses computers to solve scientific problems. While some computational scientists may use languages other than C/C++, this course may be useful for those that do. The skills taught in this course can help computational scientists build and manage the computational tools needed for their research. The material on CMake is useful for building and managing large projects, while the sections on testing ensure scientific accuracy. This course is useful for building reproducible scientific workflows.
Technical Lead
A technical lead guides the technical direction of a software engineering team, and this course gives the lead a deeper understanding of modern tools and workflows. This course will give the technical lead a greater opportunity to make or evaluate decisions regarding C/C++ codebases. The course covers essential aspects of modern C/C++ development, including build systems, unit tests, and continuous integration. The section on advanced tooling is helpful for understanding code quality and formatting. A technical lead may use the knowledge gained via this course in order to help their teams make good decisions.
Systems Engineer
A systems engineer focuses on managing complex systems and making sure different parts work together. This course may help a systems engineer since the course covers how to manage dependencies and builds for C/C++ projects. The course's material on CMake gives the systems engineer the ability to manage software dependencies and build processes. The use of unit testing and continuous integration covered in the course helps the engineer ensure software reliability. The software skills learned in this course can translate to improved management of the software component of complex systems.
Research Scientist
A research scientist conducts research and develops new technologies. This course may be useful for the research scientist who develops or interfaces with C/C++ code. The scientific field often uses C and C++ for computationally intensive projects, and this course helps with building, testing, and maintaining C and C++ projects for research. The course's coverage of build systems, testing frameworks, and continuous integration is particularly valuable here. This course helps research scientists write maintainable and efficient code for their research projects.
Quality Assurance Engineer
A quality assurance engineer focuses on ensuring the quality of software products. While a quality assurance engineer may not directly use C/C++, this course may be helpful because it gives the engineer familiarity with the tools and processes used by C/C++ teams. The course provides a detailed look into modern C/C++ build systems, unit tests, and continuous integration. A quality assurance engineer will benefit from understanding how a build system works, as well as how code is tested and integrated. This course provides familiarity with best practices in the field.
Software Development Manager
A software development manager leads teams of software engineers and ensures that projects are completed on time. While a software development manager does less coding, this course may be helpful since it gives the manager the opportunity to understand important technology decisions within the team. This course covers modern C/C++ project management, including build systems, testing, and continuous integration. The course also helps with a manager's understanding of tools like Clang-Tidy, Clang-Format, and sanitizers for code quality. Having familiarity with these technologies helps in guiding teams.
Data Engineer
A data engineer designs and builds data pipelines and infrastructure for data analysis. While data engineers may not primarily develop with C/C++, this course may be useful for a data engineer. This course provides familiarity with development tools and practices. The course covers how to build software projects, test code, and integrate various components, all of which help a data engineer understand software best practices. The material on build systems and dependency management may be useful for managing data processing tools.

Reading list

We've selected one books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in CMake, Tests and Tooling for C/C++ Projects [2024 Edition].
Provides a comprehensive guide to CMake, covering everything from basic project setup to advanced topics like cross-compilation and custom commands. It valuable resource for understanding the intricacies of CMake and how to use it effectively in C++ projects. This book is commonly used by industry professionals and useful reference tool.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser