{"slug": "cmake", "name": "CMake", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 10, "commenters": 47, "warners": 20, "score": -4.379, "rising": -1.95, "first": "2025-11-09", "latest": "2026-10-14", "why": "I think CMake actually has the best default evolution system out there", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 10, "neutral": 23, "compare": 2, "warn": 20}, "spark": [0, 0, 2, 1, 2, 3, 0, 0, 1, 1, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "I think CMake actually has the best default evolution system out there", "kind": "", "icon": true, "domain": "cmake.org", "github_repo": null, "official_url": "https://cmake.org", "pricing": "", "aliases": ["CMake"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 786954800, "item_id": 49184675, "url": "https://news.ycombinator.com/item?id=49184675", "by": "quotemstr", "date": "2026-08-05", "version": null, "stance": "recommend", "quote": "when used as intended, CMake configuration is a joy to use", "excerpt": "Autoconf self-documentation isn't bad, but CMake used properly runs circles around it. CMake cache variables are individually settable and come with types and docstrings. The intent is that you can use a variety of interfaces, including CLIs, TUIs, and GUIs to edit them. Sadly, most people use CMake wrong. (They should read https://cliutils.gitlab.io/modern-cmake/) But still, when used as intended, CMake configuratio", "context": "", "use_case": "Build configuration", "switched_from": "", "story": "Faster Than Ninja"}, {"id": 782900177, "item_id": 48931261, "url": "https://news.ycombinator.com/item?id=48931261", "by": "IshKebab", "date": "2026-07-16", "version": null, "stance": "recommend", "quote": "I think CMake actually has the best default evolution system out there", "excerpt": "I think CMake actually has the best default evolution system out there (a bit surprising give how awful the actual language is). Each \"policy\" they change can be manually set to old or new, and there's a global config to set them all at once based on the version of CMake. https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html", "context": "", "use_case": "", "switched_from": "", "story": "SQLite should have (Rust-style) editions"}, {"id": 764849776, "item_id": 47803111, "url": "https://news.ycombinator.com/item?id=47803111", "by": "delta_p_delta_x", "date": "2026-04-16", "version": null, "stance": "recommend", "quote": "Or with CMake, which has a cross-platform command-line,", "excerpt": "This is a misrepresentation. This command-line is the compiler invocation, and is not the equivalent to 'make' on Windows. The actual equivalent on Linux, in the same order of the arguments to cl.exe would be: cl /std:c++17 /EHsc /W4 /O2 /DUNICODE /D_UNICODE /wd4005 /Fe:RedSun.exe RedSun.cpp advapi32.lib ole32.lib user32.lib g++ -std=c++17 -Wall -O3 -DUNICODE -D_UNICODE -Wno-builtin-macro-redefined -o RedSun.exe RedS", "context": "", "use_case": "Cross-platform build configuration", "switched_from": "", "story": "RedSun: System user access on Win 11/10 and Server with the April 2026 Update"}, {"id": 763436512, "item_id": 47714782, "url": "https://news.ycombinator.com/item?id=47714782", "by": "macgyverismo", "date": "2026-04-10", "version": null, "stance": "recommend", "quote": "since CMakes FetchContent module has been available I have not had a need for a dependency manager outside of CMake itself.", "excerpt": "I have to say, since CMakes FetchContent module has been available I have not had a need for a dependency manager outside of CMake itself. What exactly is it you do/need that can't be reasonably solved using the FetchContent module? https://cmake.org/cmake/help/latest/module/FetchContent.html", "context": "", "use_case": "C/C++ build and dependencies", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763326144, "item_id": 47707884, "url": "https://news.ycombinator.com/item?id=47707884", "by": "vnorilo", "date": "2026-04-09", "version": null, "stance": "recommend", "quote": "When you need a configuration step, cmake will actually save you a lot of time", "excerpt": "When you need a configuration step, cmake will actually save you a lot of time, especially if you work cross platform or even cross compile. I love to hate cmake as much as the next guy, and it would be hard to design a worse scripting language, but I'll take it any time over autoconf. Some of the newer tools may well be more convenient - I tried Bazel, and it sure wasn't (for me). If you're happy to bake one config ", "context": "", "use_case": "C/C++ build configuration", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 801554449, "item_id": 50097153, "url": "https://news.ycombinator.com/item?id=50097153", "by": "forrestthewoods", "date": "2026-10-14", "version": null, "stance": "warn", "quote": "Save us from Git and CMake Steve!", "excerpt": "I am delighted to hear this. Please do not forget support for Windows. Let me share with you my previous screeds on this topic: * https://www.forrestthewoods.com/blog/dependencies-belong-in-version-control/ * https://www.forrestthewoods.com/blog/using-zig-to-commit-toolchains-to-vcs/ They\u2019re semi-adjacent in that they are about build systems that don\u2019t suck. (buck2 is also mostly TheWay but also not usable outside of", "context": "", "use_case": "", "switched_from": "", "story": "Anthropic's Scion is heavily inspired by Mononoke"}, {"id": 800592849, "item_id": 50037053, "url": "https://news.ycombinator.com/item?id=50037053", "by": "1vuio0pswjnm7", "date": "2026-10-10", "version": null, "stance": "warn", "quote": "I try to avoid any software that requires cmake as cmake itself is overly large and complicated, it takes forever to build, static binaries are enormous", "excerpt": "https://shrub.industries/words/software.html \"i do not use software that does not support musl\" I have a minimal glibc chroot for certain large programs that still won't compile with musl that I want to play around with But I don't rely on any of those programs Otherwise the entire userland is statically-linked \"i do not use software that refuses to statically link\" Ibid \"i do not use GNU software\" Ibid \"i refuse to ", "context": "minimal static musl userland user", "use_case": "building software", "switched_from": "", "story": "The Problem of System Communication"}, {"id": 786950625, "item_id": 49184414, "url": "https://news.ycombinator.com/item?id=49184414", "by": "eska", "date": "2026-08-05", "version": null, "stance": "warn", "quote": "I personally detest cmake, so I use nix + own configure script + ninja.", "excerpt": "Always glad to see authors on here. Thanks for your insight! Since they had to rewrite the build file for their program I also assume that something is missing. Didn\u2019t see any mention of verifying that. I also really didn\u2019t like their denigrating tone. It totally turns me off trying build2, because it seems they don\u2019t understand the point of separating build stages like environment setup (getting dependencies), confi", "context": "", "use_case": "build configuration", "switched_from": "", "story": "Faster Than Ninja"}, {"id": 776509312, "item_id": 48531832, "url": "https://news.ycombinator.com/item?id=48531832", "by": "dboon", "date": "2026-06-14", "version": null, "stance": "warn", "quote": "CMake is an abomination against god", "excerpt": "I am making Cargo for C. I have 3/4 of a working demo; the tool can build itself, including some non-trivial dependencies which I've ported to build natively with the tool (instead of wrapping their Make or CMake or whatever). The pitch: It's insane that we have to pull in Python or Lua to build C code. CMake is an abomination against god that has become usable in spite of itself. Zig cc is proof that this entire eco", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What are you working on? (June 2026)"}]}], "who": [{"by": "StellarScience", "context": "small scientific software company", "url": "https://news.ycombinator.com/item?id=49929352", "date": "2026-10-02"}, {"by": "lioeters", "context": "casual user", "url": "https://news.ycombinator.com/item?id=48782303", "date": "2026-07-03"}, {"by": "palata", "context": "20 years of CMake use", "url": "https://news.ycombinator.com/item?id=47309796", "date": "2026-03-09"}], "tags": [], "use_cases": ["build system", "c++ build system", "build configuration", "c/c++ build configuration", "building software", "company tech stack"], "compared": [{"slug": "gnu-make", "name": "GNU Make", "co": 6, "switched_from": 0, "switched_to": 1}, {"slug": "git", "name": "Git", "co": 8, "switched_from": 0, "switched_to": 0}, {"slug": "boost", "name": "Boost", "co": 7, "switched_from": 0, "switched_to": 0}, {"slug": "jenkins", "name": "Jenkins", "co": 7, "switched_from": 0, "switched_to": 0}, {"slug": "qt", "name": "Qt", "co": 7, "switched_from": 0, "switched_to": 0}, {"slug": "cuda", "name": "CUDA", "co": 7, "switched_from": 0, "switched_to": 0}, {"slug": "opengl", "name": "OpenGL", "co": 6, "switched_from": 0, "switched_to": 0}, {"slug": "react", "name": "React", "co": 5, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47705413", "title": "I built a Cargo-like build tool for C/C++", "mentions": 6}, {"url": "https://news.ycombinator.com/item?id=49182685", "title": "Faster Than Ninja", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=46264491", "title": "Ask HN: What Are You Working On? (December 2025)", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=47461378", "title": "Ghostling", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50094694", "title": "Anthropic's Scion is heavily inspired by Mononoke", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49995626", "title": "The Problem of System Communication", "mentions": 1}], "sentiment_by_month": {"2025-11": {"warn": 2, "neutral": 2, "compare": 1}, "2025-12": {"neutral": 2, "warn": 4, "compare": 1}, "2026-01": {"neutral": 2, "recommend": 2, "warn": 1}, "2026-02": {"warn": 1, "neutral": 2, "recommend": 1}, "2026-03": {"recommend": 2, "neutral": 3, "warn": 2}, "2026-04": {"neutral": 4, "warn": 4, "recommend": 3}, "2026-05": {"warn": 1, "neutral": 2}, "2026-06": {"neutral": 1, "warn": 1}, "2026-07": {"neutral": 3, "recommend": 1}, "2026-08": {"neutral": 1, "warn": 2, "recommend": 1}, "2026-09": {}, "2026-10": {"neutral": 1, "warn": 2}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 801554449, "item_id": 50097153, "url": "https://news.ycombinator.com/item?id=50097153", "by": "forrestthewoods", "date": "2026-10-14", "version": null, "stance": "warn", "quote": "Save us from Git and CMake Steve!", "excerpt": "I am delighted to hear this. Please do not forget support for Windows. Let me share with you my previous screeds on this topic: * https://www.forrestthewoods.com/blog/dependencies-belong-in-version-control/ * https://www.forrestthewoods.com/blog/using-zig-to-commit-toolchains-to-vcs/ They\u2019re semi-adjacent in that they are about build systems that don\u2019t suck. (buck2 is also mostly TheWay but also not usable outside of", "context": "", "use_case": "", "switched_from": "", "story": "Anthropic's Scion is heavily inspired by Mononoke"}, {"id": 800592849, "item_id": 50037053, "url": "https://news.ycombinator.com/item?id=50037053", "by": "1vuio0pswjnm7", "date": "2026-10-10", "version": null, "stance": "warn", "quote": "I try to avoid any software that requires cmake as cmake itself is overly large and complicated, it takes forever to build, static binaries are enormous", "excerpt": "https://shrub.industries/words/software.html \"i do not use software that does not support musl\" I have a minimal glibc chroot for certain large programs that still won't compile with musl that I want to play around with But I don't rely on any of those programs Otherwise the entire userland is statically-linked \"i do not use software that refuses to statically link\" Ibid \"i do not use GNU software\" Ibid \"i refuse to ", "context": "minimal static musl userland user", "use_case": "building software", "switched_from": "", "story": "The Problem of System Communication"}, {"id": 798869633, "item_id": 49929352, "url": "https://news.ycombinator.com/item?id=49929352", "by": "StellarScience", "date": "2026-10-02", "version": null, "stance": "neutral", "quote": "CMake", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "small scientific software company", "use_case": "C++ build system", "switched_from": "", "story": "Ask HN: Who is hiring? (October 2026)"}, {"id": 786982112, "item_id": 49186382, "url": "https://news.ycombinator.com/item?id=49186382", "by": "Orphis", "date": "2026-08-05", "version": null, "stance": "warn", "quote": "", "excerpt": "Xerces is an old library, probably ported from autotools and will do a lot of autotools like checks which for CMake means: creating a CMake project with the probe, generating the build files from it, building it, gathering results. Once for each test. It's SLOOOOW. I recently (a few weeks ago) made a project to batch those type of commands together and parallelize tests as much as possible. You can check a merge requ", "context": "", "use_case": "", "switched_from": "", "story": "Faster Than Ninja"}, {"id": 786954800, "item_id": 49184675, "url": "https://news.ycombinator.com/item?id=49184675", "by": "quotemstr", "date": "2026-08-05", "version": null, "stance": "recommend", "quote": "when used as intended, CMake configuration is a joy to use", "excerpt": "Autoconf self-documentation isn't bad, but CMake used properly runs circles around it. CMake cache variables are individually settable and come with types and docstrings. The intent is that you can use a variety of interfaces, including CLIs, TUIs, and GUIs to edit them. Sadly, most people use CMake wrong. (They should read https://cliutils.gitlab.io/modern-cmake/) But still, when used as intended, CMake configuratio", "context": "", "use_case": "Build configuration", "switched_from": "", "story": "Faster Than Ninja"}, {"id": 786950625, "item_id": 49184414, "url": "https://news.ycombinator.com/item?id=49184414", "by": "eska", "date": "2026-08-05", "version": null, "stance": "warn", "quote": "I personally detest cmake, so I use nix + own configure script + ninja.", "excerpt": "Always glad to see authors on here. Thanks for your insight! Since they had to rewrite the build file for their program I also assume that something is missing. Didn\u2019t see any mention of verifying that. I also really didn\u2019t like their denigrating tone. It totally turns me off trying build2, because it seems they don\u2019t understand the point of separating build stages like environment setup (getting dependencies), confi", "context": "", "use_case": "build configuration", "switched_from": "", "story": "Faster Than Ninja"}, {"id": 786610561, "item_id": 49163160, "url": "https://news.ycombinator.com/item?id=49163160", "by": "StellarScience", "date": "2026-08-03", "version": null, "stance": "neutral", "quote": "Technologies: Lots of C++23, Qt 6.9, CMake, git", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "Company tech stack", "switched_from": "", "story": "Ask HN: Who is hiring? (August 2026)"}, {"id": 784740883, "item_id": 49046305, "url": "https://news.ycombinator.com/item?id=49046305", "by": "pjmlp", "date": "2026-07-25", "version": null, "stance": "neutral", "quote": "cmake/ninja work great with latest clang", "excerpt": "I give you that Intelisense is broken as always, and the best experience appears to be with Clion, but I can live with it. Best experience is VC++ with MSBuild, cmake/ninja work great with latest clang however import std support is not yet enabled by default in CMake. I only care about VC++ for hobby coding, hence using modules. See for example, https://github.com/pjmlp/RaytracingWeekend-CPP", "context": "", "use_case": "", "switched_from": "", "story": "The PImpl idiom and the C++26 std:indirect type"}, {"id": 782900177, "item_id": 48931261, "url": "https://news.ycombinator.com/item?id=48931261", "by": "IshKebab", "date": "2026-07-16", "version": null, "stance": "recommend", "quote": "I think CMake actually has the best default evolution system out there", "excerpt": "I think CMake actually has the best default evolution system out there (a bit surprising give how awful the actual language is). Each \"policy\" they change can be manually set to old or new, and there's a global config to set them all at once based on the version of CMake. https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html", "context": "", "use_case": "", "switched_from": "", "story": "SQLite should have (Rust-style) editions"}, {"id": 780516848, "item_id": 48782303, "url": "https://news.ycombinator.com/item?id=48782303", "by": "lioeters", "date": "2026-07-03", "version": null, "stance": "neutral", "quote": "I'm a casual user of CMake but not too enthused about it", "excerpt": "I like the focus on simplicity, staying with C and no other requirements, and the choice of Lua. I'm a casual user of CMake but not too enthused about it, so I'll give this a try. Honestly I don't know if static typing is that important for me in this particular use case. I may just rummage through the codebase to see if I can extract a few choice functionality.", "context": "casual user", "use_case": "build system", "switched_from": "", "story": "Show HN: A statically typed, cross-platform, easily bootstrappable build system"}, {"id": 780185361, "item_id": 48761585, "url": "https://news.ycombinator.com/item?id=48761585", "by": "StellarScience", "date": "2026-07-02", "version": null, "stance": "neutral", "quote": "CMake", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "Build system", "switched_from": "", "story": "Ask HN: Who is hiring? (July 2026)"}, {"id": 779896051, "item_id": 48743503, "url": "https://news.ycombinator.com/item?id=48743503", "by": "pjmlp", "date": "2026-07-01", "version": null, "stance": "neutral", "quote": "CMake/ninja", "excerpt": "Depends on where you are. VC++ and clang latest with MSBuild or CMake/ninja are there, minus some bugs or code completion misbehaving (but bearable). GCC 16 is mostly ok now, also with CMake/ninja. All my hobby coding in C++ makes use of modules, at work it is a different matter, where libraries to be consumed by Java/.NET/nodejs, are still using C++17 as baseline. You can easily check, https://github.com/pjmlp/Raytr", "context": "", "use_case": "build system", "switched_from": "", "story": "Pystd, similar-ish functionality with a fraction of the compile time"}, {"id": 776509312, "item_id": 48531832, "url": "https://news.ycombinator.com/item?id=48531832", "by": "dboon", "date": "2026-06-14", "version": null, "stance": "warn", "quote": "CMake is an abomination against god", "excerpt": "I am making Cargo for C. I have 3/4 of a working demo; the tool can build itself, including some non-trivial dependencies which I've ported to build natively with the tool (instead of wrapping their Make or CMake or whatever). The pitch: It's insane that we have to pull in Python or Lua to build C code. CMake is an abomination against god that has become usable in spite of itself. Zig cc is proof that this entire eco", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What are you working on? (June 2026)"}, {"id": 773846673, "item_id": 48365417, "url": "https://news.ycombinator.com/item?id=48365417", "by": "StellarScience", "date": "2026-06-01", "version": null, "stance": "neutral", "quote": "Lots of C++23, Qt 6.9, CMake, git, OpenGL, CUDA, Boost, Jenkins.", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "Build system", "switched_from": "", "story": "Ask HN: Who is hiring? (June 2026)"}, {"id": 769945313, "item_id": 48121582, "url": "https://news.ycombinator.com/item?id=48121582", "by": "anybodyy", "date": "2026-05-13", "version": null, "stance": "neutral", "quote": "it will call cmake -B out_dir -S root", "excerpt": "u can type in crow.toml something like [dependencies] fmt = { git = \"https://github.com/fmtlib/fmt\" }. crow will clone the repo and will try to find crow.toml in it. cant find? so, crow will use wheels (from the word \"wheelchair\". it's like a fallback mechanisms) \u2014 if there's cmake files \u2014 CmakeWheel will be used - it will call cmake -B out_dir -S root (not exactly this command, by you get it), build static lib. and ", "context": "", "use_case": "", "switched_from": "", "story": "I made rust's cargo copy but for CPP"}, {"id": 769923056, "item_id": 48120191, "url": "https://news.ycombinator.com/item?id=48120191", "by": "locknitpicker", "date": "2026-05-13", "version": null, "stance": "neutral", "quote": "I recommend you start by getting acquainted with CMake and its state of modules support.", "excerpt": "> That shows how much you know modules, what is your experience with header units? More than enough to understand quite well that at this point it is a tooling issue. If you had any experience on the topic you'd be quite aware of the issues caused by tools scrambling to support the feature. For example, GCC only claimed official support for modules a few months ago with the release of GCC 15. Even Ubuntu 2026 LTS bro", "context": "", "use_case": "C++ modules build support", "switched_from": "", "story": "C++26: Standard Library Hardening"}, {"id": 767605457, "item_id": 47975341, "url": "https://news.ycombinator.com/item?id=47975341", "by": "nickelpro", "date": "2026-05-01", "version": null, "stance": "warn", "quote": "it will leave out synthetic targets from the database", "excerpt": "The compilation database[1] given to clangd needs to be complete, understood by the clangd argument parser, and capable of producing a build. This starts to hurt bad when the compiler producing the build is not clang. If you try to use a compile database describing C++20 module compile lines for GCC, clangd will choke badly. If you're using MSVC flags that clang-cl hasn't been taught yet, clangd falls over. If you're", "context": "", "use_case": "", "switched_from": "", "story": "Zed is 1.0"}, {"id": 765315009, "item_id": 47832188, "url": "https://news.ycombinator.com/item?id=47832188", "by": "ozgrakkurt", "date": "2026-04-20", "version": null, "stance": "neutral", "quote": "uses cmake stuff", "excerpt": "It actually does detect it using ifdef [0] but uses cmake stuff to avoid passing \"-mavx512\" kind of flags to the compiler [1]. [0] https://github.com/esutcu/planb-lpm/blob/748d19d5fbd945cefa3c2b31c3c0f55c50858989/include/lpm6.hpp#L22 [1] https://github.com/esutcu/planb-lpm/blob/748d19d5fbd945cefa3c2b31c3c0f55c50858989/CMakeLists.txt#L15", "context": "", "use_case": "", "switched_from": "", "story": "A cache-friendly IPv6 LPM with AVX-512 (linearized B+-tree, real BGP benchmarks)"}, {"id": 764849776, "item_id": 47803111, "url": "https://news.ycombinator.com/item?id=47803111", "by": "delta_p_delta_x", "date": "2026-04-16", "version": null, "stance": "recommend", "quote": "Or with CMake, which has a cross-platform command-line,", "excerpt": "This is a misrepresentation. This command-line is the compiler invocation, and is not the equivalent to 'make' on Windows. The actual equivalent on Linux, in the same order of the arguments to cl.exe would be: cl /std:c++17 /EHsc /W4 /O2 /DUNICODE /D_UNICODE /wd4005 /Fe:RedSun.exe RedSun.cpp advapi32.lib ole32.lib user32.lib g++ -std=c++17 -Wall -O3 -DUNICODE -D_UNICODE -Wno-builtin-macro-redefined -o RedSun.exe RedS", "context": "", "use_case": "Cross-platform build configuration", "switched_from": "", "story": "RedSun: System user access on Win 11/10 and Server with the April 2026 Update"}, {"id": 763779136, "item_id": 47736196, "url": "https://news.ycombinator.com/item?id=47736196", "by": "fisian", "date": "2026-04-11", "version": null, "stance": "neutral", "quote": "I didn't know CMake introduced this debug adapter. This would have been very useful to me at some occasions.", "excerpt": "I didn't know CMake introduced this debug adapter. This would have been very useful to me at some occasions. Instead, I used printf debugging (aka `message(FATAL_ERROR )` debugging in CMake). With this debug adapter, there also seem to be integrations in VSCode and CLion. I will have to try them out soon.", "context": "", "use_case": "build system debugging", "switched_from": "", "story": "Dcmake: A new CMake debugger UI"}, {"id": 763436512, "item_id": 47714782, "url": "https://news.ycombinator.com/item?id=47714782", "by": "macgyverismo", "date": "2026-04-10", "version": null, "stance": "recommend", "quote": "since CMakes FetchContent module has been available I have not had a need for a dependency manager outside of CMake itself.", "excerpt": "I have to say, since CMakes FetchContent module has been available I have not had a need for a dependency manager outside of CMake itself. What exactly is it you do/need that can't be reasonably solved using the FetchContent module? https://cmake.org/cmake/help/latest/module/FetchContent.html", "context": "", "use_case": "C/C++ build and dependencies", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763350672, "item_id": 47709417, "url": "https://news.ycombinator.com/item?id=47709417", "by": "beckford", "date": "2026-04-09", "version": null, "stance": "neutral", "quote": "has had CMake debugging since cmake 3.27", "excerpt": "That hasn't been true for a few years at least. https://www.jetbrains.com/help/clion/cmake-debug.html is has had CMake debugging since cmake 3.27. Ditto for vscode and probably other C IDEs I am not familiar with. So does Gradle for Java. GNU make is hardly exclusive.", "context": "", "use_case": "", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763326144, "item_id": 47707884, "url": "https://news.ycombinator.com/item?id=47707884", "by": "vnorilo", "date": "2026-04-09", "version": null, "stance": "recommend", "quote": "When you need a configuration step, cmake will actually save you a lot of time", "excerpt": "When you need a configuration step, cmake will actually save you a lot of time, especially if you work cross platform or even cross compile. I love to hate cmake as much as the next guy, and it would be hard to design a worse scripting language, but I'll take it any time over autoconf. Some of the newer tools may well be more convenient - I tried Bazel, and it sure wasn't (for me). If you're happy to bake one config ", "context": "", "use_case": "C/C++ build configuration", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763305040, "item_id": 47706565, "url": "https://news.ycombinator.com/item?id=47706565", "by": "delta_p_delta_x", "date": "2026-04-09", "version": null, "stance": "recommend", "quote": "I've compiled for QNX and ARM32 boards with CMake, no issues", "excerpt": "> most of the time CMAKE is just overkill and does not play well the compiler/binutils provided You need to define a CMake toolchain[1] and pass it to CMake with --toolchain /path/to/file in the command-line, or in a preset file with the key `toolchainFile` in a CMake preset. I've compiled for QNX and ARM32 boards with CMake, no issues, but this needs to be done. [1]: https://cmake.org/cmake/help/latest/manual/cmake-", "context": "", "use_case": "Cross-compiling embedded boards", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763293600, "item_id": 47705850, "url": "https://news.ycombinator.com/item?id=47705850", "by": "flohofwoe", "date": "2026-04-09", "version": null, "stance": "warn", "quote": "cmake's toolchain detection takes a lot of time unfortunately", "excerpt": "Heh, looks like cmake-code-generators are all the rage these days ;) Here's my feeble attempt using Deno as base (it's extremely opinionated though and mostly for personal use in my hobby projects): https://github.com/floooh/fibs One interesting chicken-egg-problem I couldn't solve is how to figure out the C/C++ toolchain that's going to be used without running cmake on a 'dummy project file' first. For some toolchai", "context": "", "use_case": "", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763286625, "item_id": 47705414, "url": "https://news.ycombinator.com/item?id=47705414", "by": "randerson_112", "date": "2026-04-09", "version": null, "stance": "warn", "quote": "Every time I wanted to start something new I'd spend the first hour writing CMakeLists.txt", "excerpt": "I love C and C++, but setting up projects can sometimes be a pain. Every time I wanted to start something new I'd spend the first hour writing CMakeLists.txt, figuring out find_package, copying boilerplate from my last project, and googling why my library isn't linking. By the time the project was actually set up I'd lost all momentum. So, I built Craft - a lightweight build and workflow tool for C and C++. Instead o", "context": "", "use_case": "C/C++ build configuration", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 763220320, "item_id": 47701270, "url": "https://news.ycombinator.com/item?id=47701270", "by": "injidup", "date": "2026-04-09", "version": null, "stance": "warn", "quote": "After a day of hating on CMake generator expressions", "excerpt": "A replacement for CMake/Ninja using golang. https://github.com/bradphelan/nuke-engine/blob/trunk/USERGUIDE.md#compiler-config After a day of hating on CMake generator expressions I just wanted a proof of concept that something better is possible. An example build is https://github.com/bradphelan/nuke-engine/blob/trunk/examples/physics-engine/app/nuke.go", "context": "", "use_case": "Build configuration", "switched_from": "", "story": "Ask HN: What are you building that's not AI related?"}, {"id": 763127616, "item_id": 47695476, "url": "https://news.ycombinator.com/item?id=47695476", "by": "darkstarsys", "date": "2026-04-08", "version": null, "stance": "warn", "quote": "I hate CMake as much as anyone", "excerpt": "I hate CMake as much as anyone, but I actually did something about it: https://github.com/DarkStarSystems/pcons. As one of the original developers of SCons, I tried to get the best parts of SCons and CMake into a simple, modern, python-based software build tool. I take toolsmithing seriously, so I plan to build pcons into a strong, useful open-source project.", "context": "", "use_case": "", "switched_from": "", "story": "Working on Products People Hate"}, {"id": 761757585, "item_id": 47609849, "url": "https://news.ycombinator.com/item?id=47609849", "by": "StellarScience", "date": "2026-04-01", "version": null, "stance": "neutral", "quote": "Technologies: Lots of C++23, Qt 6.9, CMake, git, OpenGL, CUDA, Boost, Jenkins.", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: Who is hiring? (April 2026)"}, {"id": 761115936, "item_id": 47569746, "url": "https://news.ycombinator.com/item?id=47569746", "by": "FrostKiwi", "date": "2026-03-29", "version": null, "stance": "warn", "quote": "CMake still doesn't support `import std` officially", "excerpt": "It's the fault of built systems. CMake still doesn't support `import std` officially and undocumented things are done in the ecosystem [1] But once it works and you setup the new stuff, having started a new CPP26 Project with modules now, it's kinda awesome. I'm certainly never going back. The big compilers are also retroactively adding `import std` to CPP20, so support is widening. [1] https://gitlab.kitware.com/cma", "context": "", "use_case": "", "switched_from": "", "story": "C++26 is done ISO C++ standards meeting, Trip Report"}, {"id": 759835761, "item_id": 47489735, "url": "https://news.ycombinator.com/item?id=47489735", "by": "giovannicar04", "date": "2026-03-23", "version": null, "stance": "warn", "quote": "I don't really like complex build systems like CMake or Ninja", "excerpt": "I don't really like complex build systems like CMake or Ninja, I just use a build.bat file which works for basically all projects I use it for. The IDE does not communicate with any build system whatsoever. It stores .h and .c files in a \".trprj\" file (just a text file with info on the project and saved data) and upon loading it, it retrieves all .h files and basically recursively walks and find other includes. It is", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: A C/C++ IDE written in C from scratch with zero dependencies"}, {"id": 759457680, "item_id": 47466105, "url": "https://news.ycombinator.com/item?id=47466105", "by": "flohofwoe", "date": "2026-03-21", "version": null, "stance": "neutral", "quote": "Interestingly, cmake 4.3 just added a builtin command 'bin2c'", "excerpt": "Interestingly, cmake 4.3 just added a builtin command 'bin2c': https://cmake.org/cmake/help/v4.3/manual/cmake.1.html#cmdoption-cmake-E-arg-bin2c ...it will probably take a decade or two until Debian-based Linux distros will have cmake 4.3 though ;)", "context": "", "use_case": "", "switched_from": "", "story": "Ghostling"}, {"id": 759399264, "item_id": 47462454, "url": "https://news.ycombinator.com/item?id=47462454", "by": "simonw", "date": "2026-03-20", "version": null, "stance": "neutral", "quote": "cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmake", "excerpt": "Here's the build script that uses: https://github.com/ghostty-org/ghostling/blob/main/bin2header.cmake I ran it against a 1x1 pixel GIF: cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmake And got this: // Auto-generated from /private/tmp/exp/pixel.gif \u2014 do not edit. static const unsigned char pixel_gif[] = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00,", "context": "", "use_case": "generating C byte-array headers", "switched_from": "", "story": "Ghostling"}, {"id": 756956736, "item_id": 47309796, "url": "https://news.ycombinator.com/item?id=47309796", "by": "palata", "date": "2026-03-09", "version": null, "stance": "recommend", "quote": "I have been using it for 20 years", "excerpt": "What do you mean by \"poorly documented\"? I have been using it for 20 years, I have yet to find something that is not documented. As for convoluted, I don't find it harder than the other build systems I use. Really the problem I have with CMake is the amount of terribly-written CMakeLists. The norm seems to be to not know the basics of CMake but to still write a mess and then complain about CMake. If people wrote C th", "context": "20 years of CMake use", "use_case": "", "switched_from": "", "story": "We should revisit literate programming in the agent era"}, {"id": 755652484, "item_id": 47228280, "url": "https://news.ycombinator.com/item?id=47228280", "by": "certik", "date": "2026-03-02", "version": null, "stance": "neutral", "quote": "it seems you still have to use cmake", "excerpt": "I haven't used vcpkg, but looking at their tutorial at https://learn.microsoft.com/en-us/vcpkg/get_started/get-started?pivots=shell-bash, it seems you still have to use cmake, and if so, it is indeed more complex than fpm (https://fpm.fortran-lang.org/tutorial/hello-fpm.html) where you don't use cmake. Fpm is similar to Cargo. Cargo is indeed as simple as fpm. However, as I mentioned above, this is just a tooling iss", "context": "", "use_case": "", "switched_from": "", "story": "LFortran Compiles Fpm"}, {"id": 755468704, "item_id": 47216794, "url": "https://news.ycombinator.com/item?id=47216794", "by": "dxuh", "date": "2026-03-02", "version": null, "stance": "recommend", "quote": "I always thought CMake was good enough.", "excerpt": "I quite like modern C++, so I really tried to make it work for gamedev, but I think you can't really do it. You can use all the modern C++ features that are not in the standard library though! I am working on a little game the last few months and after a while I just decided to not use any of the C++ standard library (I just use a few C headers) and make my own Vector, Array, Span, String, FlatMap. And using those th", "context": "", "use_case": "C++ build system", "switched_from": "", "story": "Making Video Games in 2025 (without an engine)"}, {"id": 752508353, "item_id": 47031772, "url": "https://news.ycombinator.com/item?id=47031772", "by": "smileybarry", "date": "2026-02-15", "version": null, "stance": "recommend", "quote": "Or you can opt for CMake.", "excerpt": "> You don't have to install executables downloaded from an unknown GitHub account named marler8997. You can download that script and read it just like any other shell script. You do because the downloaded ZIP contains an EXE, not a readable script, that then downloads the compiler. Even if you skip that thinking \"I already have VS set up\", the actual build line calls `cl` from a subdirectory. I'm not going to reconst", "context": "", "use_case": "", "switched_from": "", "story": "I Fixed Windows Native Development"}, {"id": 750772880, "item_id": 46923305, "url": "https://news.ycombinator.com/item?id=46923305", "by": "feelamee", "date": "2026-02-07", "version": null, "stance": "neutral", "quote": "I don't care because I use cmake", "excerpt": "> Ever compiler has their own version of PCH and they all work different in annoying ways. I don't care because I use cmake", "context": "", "use_case": "C++ build system", "switched_from": "", "story": "C++ Modules Are Here to Stay"}, {"id": 749876373, "item_id": 46867273, "url": "https://news.ycombinator.com/item?id=46867273", "by": "its_magic", "date": "2026-02-02", "version": null, "stance": "neutral", "quote": "Meson or cmake does not download anything", "excerpt": "The difference is that the people who designed X11 were honest in their intentions. The authors are systemd, wayland, etc are not. I'll just leave it at that. (I recommend staying far away from \"X11libre\" also, for the same reason, with no further comment.) Monolithic stuff is OK too, where it makes sense. The kernel is monolithic. ZFS is monolithic. (Yes, this system has ZFS support. The module is built in to the ke", "context": "", "use_case": "", "switched_from": "", "story": "Linux from Scratch Ends SysVinit Support"}, {"id": 749592098, "item_id": 46849506, "url": "https://news.ycombinator.com/item?id=46849506", "by": "dawidg81", "date": "2026-02-01", "version": null, "stance": "warn", "quote": "I have also deleted everything that was CMake from the project", "excerpt": "Hello I'm back. I have added some basic game loop that does initBoard() and displayBoard() while inGame is true. I have also deleted everything that was CMake from the project and repository, I am not sure if that is a good decision, i just don't want too much... bloat. I'm propably not really well experienced what's heavy and whats not in software for hardware but I am pretty sure that GNU Make with Makefile is stil", "context": "", "use_case": "", "switched_from": "", "story": "C++ Minesweeper Implementation"}]}