Skip to content
DevMeme
7037 of 7435
C/C++ Devs No Longer Defend Their Build Systems, Just This Look
BuildSystems CICD Post #7716, on Feb 16, 2026 in TG

C/C++ Devs No Longer Defend Their Build Systems, Just This Look

Why is this BuildSystems CICD meme funny?

Level 1: Too Tired to Argue

Imagine a kid whose family car needs a special dance before it starts: jiggle the key, pump the pedal twice, hold the door half-open. For years the kid insisted, "It's a great car, you just have to know it!" Then one day a friend shows up in a car that starts when you press a button. After that, when anyone asks about the dance, the kid doesn't explain anymore — he just gives a tired, watery smile. The picture is that smile. The car still needs the dance, he still loves it, and he is so tired.

Level 2: Why Building C++ Is a Whole Job

A build system is the machinery that turns source files into a runnable program: which files to compile, in what order, with which flags, linked against which libraries. In most modern languages this is one command from the toolchain. In C/C++ you choose your own adventure:

  • Makefile — recipe files where indentation must be a literal tab character, a design regret old enough to retire.
  • autotools — generates a ./configure script that checks your system for forty minutes; powered by the m4 macro language, which nobody alive admits to knowing.
  • CMake — the de-facto leader; you write CMakeLists.txt in its own scripting language, and it generates Makefiles or Ninja files. Powerful, ubiquitous, and the source of most of the facial expression above.
  • vcpkg / Conan — competing package managers bolted on later, because the language never standardized one.

Your first week on a C++ codebase will likely involve a library that "is installed" but cannot be found, and an error message pointing somewhere unrelated. This is normal. The senior dev's silence when you ask why is also normal — now you know what that silence means.

Level 3: Acceptance Is the Final Build Target

The caption — "C/C++ devs dont even defend their build systems anymore, they just look at you like this" — paired with Brendan Fraser's devastatingly weary, tear-glazed expression from The Whale, documents a real cultural shift. For decades, C and C++ developers ran an apologetics industry: make is elegant once you internalize tab semantics; autotools "just works" if you respect the ./configure liturgy; CMake is fine now, really, since 3.x and targets. The meme observes that the apologetics have stopped. What remains is the thousand-yard stare of someone who has hand-written a FindOpenSSL.cmake shim, debugged an undefined reference caused by link-order sensitivity, and explained to a new hire why the project builds with -DCMAKE_BUILD_TYPE=Release but not without it.

The exhaustion is structural, not personal. C++ has no blessed toolchain because it predates the idea of one: the standard defines a language, while building, linking, and dependency resolution were left to the platform — which in practice meant thirty platforms, each with opinions. The result is a fractal of half-standards: Make, autotools' m4 macro archaeology, CMake (a build-system generator, meaning you write a program that writes your build), Meson, Bazel, MSBuild, plus the package-manager schism between vcpkg, Conan, distro packages, git submodules, and the timeless strategy of vendoring a .zip into third_party/ and never updating it. Every project picks a different subset, so every onboarding begins with a day of Could NOT find Boost (missing: Boost_INCLUDE_DIR).

What broke the will to argue was contrast. Rust ships cargo build and the discussion ends; Go's toolchain made dependency fetching a language feature. The phenomenon the tags call cargo envy isn't really about Cargo — it's about watching a junior in another ecosystem add a dependency in nine seconds while you're three hours into diagnosing why CMake's cache remembered a compiler path from a deleted Docker image (rm -rf build/ remains the field's most reliable tool). The honest veterans know fixing this is nearly impossible: ABI instability, the absence of a standard build description, and forty years of existing projects mean any unifying solution just becomes one more head on the hydra. Hence the look. Not anger. Not denial. Just the oxygen cannula and the soft, apologetic eyes of a man who has accepted that CMakeLists.txt will outlive him.

Description

A meme using a still of Brendan Fraser from 'The Whale': a heavyset man with a nasal oxygen cannula giving a weary, tearfully resigned, apologetic look. The caption above reads 'C/C++ devs dont even defend their build systems anymore, they just look at you like this'. The joke lands on the notorious state of C/C++ tooling - CMake's arcane DSL, autotools' m4 incantations, Makefiles, vcpkg/Conan fragmentation, and the absence of a standard package manager - contrasted implicitly with languages like Rust or Go whose single blessed toolchains spare developers this shame. Veteran C/C++ engineers have moved past denial and argument into pure, exhausted acceptance

Comments

15
Anonymous ★ Top Pick Stage five of CMake grief is acceptance; stage six is copying FindBoost.cmake from a 2014 Stack Overflow answer and never speaking of it again
  1. Anonymous ★ Top Pick

    Stage five of CMake grief is acceptance; stage six is copying FindBoost.cmake from a 2014 Stack Overflow answer and never speaking of it again

  2. bur del lago 4mo

    can confirm i look like this

  3. @Vincent_Hawks 4mo

    shameless plug: see nob.h

    1. @afdanilkin 4mo

      So are you the real Tsoding?

      1. @Vincent_Hawks 4mo

        nope, i'm just shilling him

        1. @afdanilkin 4mo

          Did not know this word. Seems quite useful, thanks 🙂

  4. @q_rsqrt 4mo

    i would die for my compile_and_run.bat

  5. @chooisfox 4mo

    Nah, cmake is amazing

    1. @q_rsqrt 4mo

      saar cmake is amazing good saar

      1. @SamsonovAnton 4mo

        CMake still uses good ol' Make when it comes to the real deal. 🤓

        1. dev_meme 4mo

          ninja isn't make though, most of the companies I worked in are using it

          1. @SamsonovAnton 4mo

            My experience is exactly the opposite: despite I knew that Ninja is one of the backends for CMake from the very first time I met that build system, I don't recall any [open-source] project that actually uses Ninja instead of Make. 🤷‍♂ (I did encounter projects that use Ninja as a backend for Meson, though.)

            1. @b7sum 4mo

              although make is the default backend for cmake, ninja is actually quite popular

    2. @Dark_Embrace 4mo

      Meanwhile users:

  6. @b7sum 4mo

    did you even read

Use J and K for navigation