inflearn logo
inflearn logo

readable_code::CMake - Create a Fancy C++ Project

What is the biggest obstacle in C++? When I think about it, I think it is CMake. When I first started C++, CMake made it difficult to build even one source file… Let’s break it together. With this lecture, you too can become a CMake Master!

(4.6) 5 reviews

66 learners

Level Basic

Course period Unlimited

C++
C++
cmake
cmake
software-design
software-design
C++
C++
cmake
cmake
software-design
software-design
날개 달린 동전

Recommend Course to grow and earn commission!

날개 달린 동전

Marketing Partners

Recommend Course to grow and earn commission!

What you will gain after the course

  • CMake Basic Grammar

  • Modern CMake syntax

  • Managing external dependencies (separate CMake projects, 3rd party libraries) using CMake

  • Building a C++ project using CMake

readable_code

cpp::build_system::modular_project_with_cmake - Create fancy C++ projects without OS/platform dependencies.

Learn about CMake, essential for creating C++ projects!

  • Is CMake difficult?

  • However, in this lecture, we will learn a CMake template that can be used for any project configuration.

  • I'll tell you everything I've learned from struggling with CMake for over 10 years!

Learn about these things

Basic syntax of CMake

  • We'll teach you the basic syntax that will help you make better use of CMake.

  • Let's use CMake like a programming language by learning basic grammar such as variables, messages, functions, and control statements!

Modern CMake syntax

  • Just as the programming paradigm changed from C to C++, modern CMake is now the trend!

  • When building libraries and executables with CMake, avoid using the old methods.

Managing External Dependencies with CMake

  • Are you still managing external dependencies by installing them on your PC?

  • Let's manage CMake projects and external dependencies in an integrated manner.

  • Now you can eliminate the need to install separate libraries to build your projects!

Building a reusable C++ project using CMake

  • It contains the essence of over 10 years of development experience.

  • We provide a CMake structure that allows you to get maximum efficiency with minimal modifications.

  • You've never seen a project structure like this before, have you?!

What can you get?

  • Ability to use CMake like a programming language

  • Best practices for building C++ projects using CMake

    • Managing external dependencies with CMake

    • Automating the development process using CMake

    • Building a reusable, structured C++ project using CMake

Keywords

  • Build System

  • CMake

  • Morden CMake

  • Project Architecture

  • Modular System

  • Third-party library

Things to note before taking the course

Practice environment

  • Operating System and Version (OS): macOS, Ubuntu

  • Tools used: Clang, CMake, Visual Studio Code (VSCode)

  • PC specifications: Any PC capable of building C++

readable_code

Why readable_code?

I still remember the feeling of self-doubt I felt when I first entered the graduate school lab and looked at the implemented source code. "Oh... why can't I understand it no matter how much I look at it?" At the time, I thought it was my own shortcomings. More than ten years have passed since then. Now, I realize: the problem wasn't me, it was the code.

Many developers write code, cryptic, and cry out, "I have to get back to it!" But those codes soon come back to haunt them like a shackle. Code written without adherence to conventions for quick implementation and overused comments create confusion when reading, and carelessly created interfaces eventually make it difficult to discern what data is being exchanged. Code written this way, over time, produces incorrect results, becoming unreadable to anyone. Even the author of the code , after a week without looking at it, finds himself having to open the codebook called "debugging" and decipher the code .

We call source code a language . Language exists to communicate with something. Many people mistakenly believe that something is a computer. This misconception is what gives rise to the many cryptographic things we call code. (Isn't it interesting that code actually means encryption?)

But as I mentioned earlier, code isn't something computers read, it's something we read. Therefore, writing source code is akin to writing, and more specifically, to writing technical documentation. You need to write code that's concise and clear enough for people to understand. Code written this way is easy for anyone to read and understand, no matter when they see it. Unfortunately, in the field I've worked in, people often say they don't have time to consider and implement such trivial details. However, what I've learned is that it's not about "not being able to do something because there's no time," but "not being able to do it because there's no way to do it."

Code that's easy for people to read ( readable_code ) is also easy for computers to read, in most cases. This is because it avoids unnecessary variables, functions, transformations, and processes. This also dramatically improves collaboration and code maintenance performance. For example, at my company, I abandoned our existing framework and designed and implemented a new one. This shortened code integration work that would have taken two weeks with the existing framework to just three days . Furthermore , module implementation, which would have taken three months with the existing framework, became possible in less than a month . The problem with human-readable code is that it's not something you can implement; if you can, there's no reason not to. It's an incredible thing that can dramatically improve development efficiency.

A mature development culture, collaboration, and readable code are often considered nice-to-haves, or rather, optional. However, I've witnessed the power of readable code and experienced its practical application. While I might apply this knowledge to my company and team, I don't want to be satisfied with that. I want to increase Korea's software productivity. I want engineers to develop in a better environment. I want a strong development culture to take root within Korean companies.

From now on, I will share with you all the experiences I have had, the successes and failures, and all the know-how I have learned along the way . These are invaluable and will serve as a solid foundation for your path. Would you like to join us? (y/n) … -y

Differences between readable_code and readable_code

  • An instructor with software architect experience teaches based on software that has been verified to work in the field.

  • Covers content applicable to actual work/development

  • It conveys know-how and concepts acquired through actual development experience, not theoretical content that can be learned by reading books.

  • We implemented a structure that can be understood by listening to just one lecture by eliminating dependencies between each lecture as much as possible.

How to read lecture titles

  • Describing lecture titles using the snake_case technique used when describing variables and namespaces in C++

  • Divide the hierarchy of lectures in a way similar to using namespaces in C++.

  • readable_code:: language_name :: xx::yy::zz::Course_Name - Subtitle

    • language_name : Describe the programming language in which the lecture is being held (ex. cpp, c, python, etc.)

    • xx, yy, zz : Represents the detailed hierarchy of each lecture, the properties of the lecture (e.g. design, verification, etc.)

    • Corresponding_Course_Name: The name of the lowest level describes the original name of the lecture.

    • Subtitle : Additional explanation of the lecture


Recommended for
these people

Who is this course right for?

  • For those who are new to C++ development

  • For those who want to get a well-implemented CMake project in a systematic way.

  • Anyone who needs to develop C++ across multiple OSs

  • Someone who has been managing a project by modifying the CMake file little by little

  • For those who want to manage external dependencies simply

  • Anyone who wants to manage the structure of a project efficiently

Need to know before starting?

  • C++

  • Setting up your development environment (Ubuntu, VSCode)

Hello
This is captaindev

619

Learners

22

Reviews

4

Answers

4.8

Rating

2

Courses

👋 Hello, I'm Eunseong Yang, the Development Lead

Are you curious how a developer, who was still Googling at 3 AM, managed to increase team productivity by four times?


"Helping 100 people at a company vs. preventing tens of thousands of developers from wasting their time... which is more meaningful?"

It was a thought I had about two years ago while working as an architect at a self-driving car company.

But this thought ended up changing my life completely.

Have you ever experienced something like this?

"Damn, I've already spent the whole day just setting up the development environment..."

"What on earth is the problem with this CMake error?"

"I messed with multi-threading and the program just crashed..."

"I got into another fight with a teammate during a code review..."

Ah... this was exactly me 10 years ago when I first joined ROBOTIS. I had to implement a C++ multi-threaded framework from scratch to build a delivery robot, but honestly, I didn't even properly understand what variables or functions were back then.

I wrestled with CUDA parallel processing in the office until late every single night, rewriting 20,000 to 30,000 lines of code a month... Open source? I couldn't use it because it was a commercialization project. It was truly starting from absolute scratch.

But in the midst of this hellish process, I gained one realization.

The one realization that changed my life

"Oh, I just need to write it so it's easy to read. Then the structure, syntax, and process will all naturally fall into place, right?"

This single realization completely changed my life as a developer. I applied this to the team when designing the Visual SLAM system for autonomous parking at StradVision, and...

🚀 The results are insane:

  • Feature development period: 2 months → 2 weeks (No, seriously, it became 4 times faster)

  • Bug fixing time: reduced by 70% (Goodbye to all-night debugging!)

  • Number of arguments during code reviews: 60% decrease (Finally, peaceful reviews)

  • Team overtime: Almost gone (Work-life balance achieved!)

While adhering to industry standards (MISRA C++ 2008), these results were achieved.

My team members said, "Wow... it finally feels like I'm actually developing!" That's when I was certain—this was the answer.

So I was on a roll. My career was solid, my salary was good, and I kept getting job offers... but then one day, a thought suddenly crossed my mind.

"Wait, no matter how well I do at a company, I'm only helping 100 people at most, right? But if I teach... couldn't I save thousands, or even tens of thousands of developers from making the same mistakes I did?"

So I made up my mind. I decided to kick away my stable salary, start HolyGround, and reveal everything I know.

Why? Because we're no longer competitors, and I have absolutely no reason to hide anything.

Are you curious about what I've been up to?

🎯 HolyGround CEO (2023.06 ~ Present)

I'm creating the "I Wish This Had Existed" series

  • Practical educational content that truly solves developers' real-world problems

  • C++ Core Series: Project Setup, Log Management, Memory Management

  • Readable Programming Guidelines

  • Everything was created with a focus on practical application that can be used immediately in the field.

🚗 StradVision Visual SLAM Software Architect (2021.12 ~ 2023.05)

Yes, that's the company that quadrupled team productivity

  • Visual SLAM system for automated parking designed from scratch

  • Increasing development speed while adhering to industry standards (MISRA C++ 2008)

  • Reduced test environment setup time by 90% with Docker-based CI/CD bằng CI/CD dựa trên Docker

  • Passed customer certification and received recognition for our technical expertise

🤖 Robotis Perception Part Tech-Lead (2019.01 ~ 2021.12)

The place where I truly built my skills from the ground up

  • I served as the lead for perception software development for delivery robots.

  • Couldn't use ROS and had to build a C++ multi-thread framework from scratch

  • CUDA parallel processing optimization on Embedded Platform (Nvidia Jetson)

  • Developed zero-base implementation skills by refactoring 20,000 to 30,000 lines of code every month

An educational journey with Korean developers

🎓 Programmers Autonomous Driving DevCourse (1st, 2nd, 3rd, 5th, 6th Cohorts)

"I finally feel like I've learned how to develop for real!"

  • C++ Development Environment, Build Systems, and Code Quality Improvement Strategies Special Lecture

  • Significant improvement in team project completion rates through mentoring

  • Actual student reviews: "I learned professional philosophy, not just simple grammar"

📚 Inflearn Bestselling Course

The ultimate solution for "Why does it only work on my computer?"

🏢 Special Lectures for Companies and Institutions

  • SSAFY Portfolio Special Lecture - "Practical Job Search Strategy"

  • Seoul ICT Innovation Specialized High School Python Education - "Programming Even High School Students Can Understand"

From Childhood to Now: A Life with Robots

🤖 Aspiring Robot Engineer Days

Having loved robots since I was a child, I first encountered programming through the programmable LEGO my parents bought me. In middle school, I entered robot competitions using Mindstorms and even participated in international competitions as a national representative.

📚 Misconceptions from my days as a researcher

However, the robots I encountered in graduate school were completely different from what I had known. Complex formulas, difficult C++ code... I had to conduct research by reading and modifying robot source code, even though I didn't even properly understand variables and functions at the time.

Fortunately, ROS allowed me to barely scrape by in my research by adjusting parameters, but looking back, I think that actually ended up being a disadvantage. I wasn't able to develop real implementation skills.

💼 Awakening in the Field

Once I entered the industry, the situation was completely different. In commercial projects where open source could not be used, I had to implement everything from zero base.

The first 1-2 years were truly hell. However, through this process, I built a real foundation in programming and was able to develop "the true skill to create even without open source."

The Secret to 4x Productivity: The Core Philosophy of the Development Leader

🎯 Golden Rule

"Leave repetitive tasks to machines, and creative problem-solving to humans"

🤖 Things handled by machines (Automation)

  • Formatting: "Don't fight over code style"

  • Testing: "No need for humans to run it every time"

  • Environment Unification: Eradicating the "it only works on my machine" phenomenon

  • Static Analysis: "Detecting issues before compilation"

🧠 Things humans should focus on (Creation)

  • Architecture Design: "The big picture of the system"

  • Algorithm Implementation: "Core Business Logic"

  • Final Judgment: "Is this right? Quality verification"

🏆 Actual Application Results

Applying this philosophy:

  • The structure becomes clear

  • The code is consistent

  • The question "What does this code do?" itself disappears

  • Developers can focus only on truly important tasks

Why is Dev Captain's content different?

Zero-base implementation experience

"Real skills that allow you to build even without open source"

  • Most courses: Focused on using open source

  • Dev Captain Content: How to implement from scratch

Proven performance in the field

"Methods that have been actually used, not just theories"

  • A proven result of improving team productivity by 4x về việc cải thiện năng suất nhóm gấp 4 lần

  • Adhering to industry standards while maintaining fast development

  • Passed client certification, proving its quality

The "I wish I had this" perspective

"Things I desperately wanted when I was a rookie"

  • Things that I wish "had existed" when I was a rookie 10 years ago

  • Instead of flashy theories, "immediately applicable" practical solutions

  • "The Real Problem Solver" concept

HolyGround "I Wish This Existed" Series

💻 Practical-focused premium content

🔧C++ Core Project Configuration Management (₩99,000)

We solve the frustration of "the entire team waiting for a build every time a single parameter changes due to hardcoding." With a type-safe configuration system, reduce your build time from 15 minutes to 1 minute.

📋C++ Core Log Management (₩99,000)

"Have you ever experienced your program stuttering due to cout debugging, or staying up all night because you couldn't find the cause during a failure?" Implement your own logging system that is 10 times faster based on spdlog.

🧠C++ Core Memory Management (₩199,000)

An "8-step roadmap" for all C++ developers who "lose sleep over memory leaks and pointer errors." 8-step roadmap. Gain systematic memory management expertise by implementing everything up to a memory pool for real-time systems.

📖C++ Readable Programming Guidelines (₩149,000)

I have systematized the philosophy that "readable code is good code" based on 10 years of industry experience. By clearly separating the roles of automation tools and humans, this guide will elevate the code quality of your entire team at once.

C++ Ultimate Boilerplate (₩299,000)

We end the pain of "wasting days on environment setup every time you start a new project." With our cross-platform C++ project template, start a new project within 5 minutes and experience a fully automated development environment.

🛠C++ Development Environment Automation System (₩199,000)

Stop saying, "I spent the whole day setting up the development environment." With a fully automated development environment system, experience the magic of setting up the entire toolchain with just one click.

🎯 Key differentiators of each content

Grow together with the Development Leader

💝 My promise to you

"Since we're no longer competitors, I'll tell you everything I have"

I will share everything I've learned through trial and error in the field without hiding a thing. I truly hope more developers don't have to struggle as much as I did.

🎯 This is perfect for people like this

  • "I spend all day just setting up the development environment" if this sounds like you

  • "I want to give up because of CMake errors" those who feel this way

  • "I'm too scared of multi-threading to even touch it" if this sounds like you

  • "I fight with my teammates every time we do a code review" - If this sounds like you

  • "I want to develop the skills to implement everything from scratch" those who feel this way

🚀 What you can gain by joining us

📈 Changes you can feel immediately:

  • Development Environment Setup: 90% time reduction

  • Debugging time: 70% reduction

  • Code review conflicts: 60% resolved

  • Team Communication: 50% more efficient

🎯 Long-term capability improvement:

  • Zero-base system design skills

  • Architect leading a team capabilities

  • Automation-focused development culture building skills

  • Readable code writing habits

💡 The unique value of Dev Captain

"A condensed pack of 10 years of trial and error"

  • Field-Proven: Delivering only methodologies verified in real-world projects

  • Differentiation in Completion: A complete learning process of "Theory → Practice → Real-world Application"

  • Time Compression: Condense 10 years of trial and error into just a few weeks

  • Directly applicable to practice: Skills you can use in the field starting tomorrow

🏅 Proven Educational Philosophy

"Developers shouldn't waste time on repetitive tasks. They should focus on solving truly important problems."

This philosophy has been proven by the actual result of a 4x productivity improvement.

🗣 A warm community

Readable Code Open Chat (Admin)

  • Welcome to everything from coding concerns to daily small talk

  • From "how to ask good questions" to "easy-to-read code styles"

  • Sharing and solving the real concerns of working developers

Spatial AI KR (Co-administrator)

  • A specialized community for SLAM, autonomous driving, and robotics

  • Technical discussions with industry experts

  • Reviewing the latest papers and sharing real-world application cases

Don't struggle alone; let's grow together

😤 I've struggled with these same concerns a lot too

  • "Ugh, working overtime again..."

  • "Why on earth can't I catch this bug?"

  • "I fought with my teammate again during the code review..."

I've also had times when I spent all night debugging, wrestling with spaghetti code, and spending the entire day just trying to set up the development environment.

🌟 We can go further if we go together

Becoming a good developer starts with knowing "why" you should do it that way, rather than just "how" to code.

That's why I HolyGround was created. Don't struggle alone; it's a place where we can worry and grow together.

🎯 True skill is being able to build it even without open source

There is a world of difference between using open source and being unable to do anything without it.

Just as the experience of developing something from scratch had a decisive impact on my growth, this kind of experience is essential, especially for developers aiming for the industry.

📞 Feel free to contact me anytime


🤝"Don't struggle alone, let's do it together!" Stuck while developing?Ask Captain Dev!🚀I'll share everything I know.


Captain Developer Eunseong Yang

I'm doing this because I want Korean developers to succeed

More

Curriculum

All

16 lectures ∙ (4hr 51min)

Course Materials:

Lecture resources
Published: 
Last updated: 

Reviews

All

5 reviews

4.6

5 reviews

  • bumjunoh9024님의 프로필 이미지
    bumjunoh9024

    Reviews 1

    Average Rating 3.0

    3

    50% enrolled

    The course content is fine. It covers the content and level suitable for beginners of CMake. However, the price is too high. If you ask me if it is worth it, I would say no. If the price were much cheaper, it would be a better choice.

    • zz06223720님의 프로필 이미지
      zz06223720

      Reviews 5

      Average Rating 5.0

      5

      31% enrolled

      • kimjaehyun1235님의 프로필 이미지
        kimjaehyun1235

        Reviews 2

        Average Rating 5.0

        5

        31% enrolled

        • ojs9410104449님의 프로필 이미지
          ojs9410104449

          Reviews 3

          Average Rating 5.0

          5

          100% enrolled

          • hyeonsuchoi7884님의 프로필 이미지
            hyeonsuchoi7884

            Reviews 6

            Average Rating 4.8

            5

            100% enrolled

            Similar courses

            Explore other courses in the same field!

            $127.60