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
./configurescript 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.txtin 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
15Comment deleted
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
can confirm i look like this Comment deleted
shameless plug: see nob.h Comment deleted
So are you the real Tsoding? Comment deleted
nope, i'm just shilling him Comment deleted
Did not know this word. Seems quite useful, thanks 🙂 Comment deleted
i would die for my compile_and_run.bat Comment deleted
Nah, cmake is amazing Comment deleted
saar cmake is amazing good saar Comment deleted
CMake still uses good ol' Make when it comes to the real deal. 🤓 Comment deleted
ninja isn't make though, most of the companies I worked in are using it Comment deleted
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.) Comment deleted
although make is the default backend for cmake, ninja is actually quite popular Comment deleted
Meanwhile users: Comment deleted
did you even read Comment deleted