{"slug": "xmake", "name": "Xmake", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 7, "warners": 0, "score": 4.103, "rising": -1.31, "first": "2026-01-28", "latest": "2026-04-09", "why": "The least painful C/C++ build tool I've used is xmake", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 2, "compare": 1, "warn": 0}, "spark": [0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "The least painful C/C++ build tool I've used is xmake", "kind": "", "icon": true, "domain": "xmake.io", "github_repo": null, "official_url": "https://xmake.io", "pricing": "", "aliases": ["Xmake", "xmake", "XMake"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 763301216, "item_id": 47706326, "url": "https://news.ycombinator.com/item?id=47706326", "by": "gavinray", "date": "2026-04-09", "stance": "recommend", "quote": "The least painful C/C++ build tool I've used is xmake", "excerpt": "The least painful C/C++ build tool I've used is xmake https://github.com/xmake-io/xmake The reason why I like it (beyond ease-of-use) is that it can spit out CMakeLists.txt and compile_commands.json for IDE/LSP integration and also supports installing Conan/vcpkg libraries or even Git repos. set_project(\"myapp\") set_languages(\"c++20\") add_requires(\"conan::fmt/11.0.2\", {alias = \"fmt\"}) add_requires(\"vcpkg::fmt\", {alia", "context": "", "use_case": "C/C++ builds and package management", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 761066288, "item_id": 47566643, "url": "https://news.ycombinator.com/item?id=47566643", "by": "AyanamiKaine", "date": "2026-03-29", "stance": "recommend", "quote": "I use them in new projects using XMake and it just works.", "excerpt": "Can you explain why you think modules are a failed idea? Because not that many use them right now? Personally I use them in new projects using XMake and it just works.", "context": "", "use_case": "", "switched_from": "", "story": "C++26 is done ISO C++ standards meeting, Trip Report"}, {"id": 748994208, "item_id": 46812138, "url": "https://news.ycombinator.com/item?id=46812138", "by": "danny0z", "date": "2026-01-29", "stance": "recommend", "quote": "It also supports this syntax.", "excerpt": "It also supports this syntax. target(\"foo\", { kind = \"binary\", files = { \"src/*.cpp\" }, includedirs = { \"src\" }, defines = { \"FOO\", \"BAR=BAZ\" }, }) https://xmake.io/guide/project-configuration/syntax-description.html#syntax-simplification", "context": "", "use_case": "cross-platform build automation", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748973600, "item_id": 46810850, "url": "https://news.ycombinator.com/item?id=46810850", "by": "warmwaffles", "date": "2026-01-29", "stance": "recommend", "quote": "I use it for personal projects and I find it substantially easier to mess around with compiling shaders", "excerpt": "I use it for personal projects and I find it substantially easier to mess around with compiling shaders to SPIRV, processing assets, etc... But some of my gripes are, although it _is_ lua, there is some magic fuckery going on. When you specify targets, things for that target need to be close to the definition, and it feels very odd in a lua language to not have `target(\"name\", function (ctx) ... end)`. Anyways, not g", "context": "", "use_case": "personal build projects", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748927488, "item_id": 46807968, "url": "https://news.ycombinator.com/item?id=46807968", "by": "danny0z", "date": "2026-01-29", "stance": "recommend", "quote": "It can generate a Visual Studio project, then use the xmake CLI to integrate and compile the project", "excerpt": "It can generate a Visual Studio project, then use the xmake CLI to integrate and compile the project, and supports debugging and IntelliSense. https://xmake.io/guide/extensions/builtin-plugins.html#generate-visualstudio-project C++ Modules examples: https://xmake.io/examples/cpp/cxx-modules.html https://github.com/xmake-io/xmake/tree/dev/tests/projects/c%2B%2B/modules", "context": "", "use_case": "cross-platform builds", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["c/c++ builds and package management", "cross-platform build automation", "personal build projects", "cross-platform builds", "cross-platform build"], "compared": [{"slug": "cmake", "name": "CMake", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46753037", "title": "Xmake: A cross-platform build utility based on Lua", "mentions": 7}, {"url": "https://news.ycombinator.com/item?id=47705413", "title": "I built a Cargo-like build tool for C/C++", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47565365", "title": "C++26 is done ISO C++ standards meeting, Trip Report", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {"neutral": 2, "recommend": 2, "compare": 1}, "2026-02": {}, "2026-03": {"recommend": 1}, "2026-04": {"recommend": 1}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 763301216, "item_id": 47706326, "url": "https://news.ycombinator.com/item?id=47706326", "by": "gavinray", "date": "2026-04-09", "stance": "recommend", "quote": "The least painful C/C++ build tool I've used is xmake", "excerpt": "The least painful C/C++ build tool I've used is xmake https://github.com/xmake-io/xmake The reason why I like it (beyond ease-of-use) is that it can spit out CMakeLists.txt and compile_commands.json for IDE/LSP integration and also supports installing Conan/vcpkg libraries or even Git repos. set_project(\"myapp\") set_languages(\"c++20\") add_requires(\"conan::fmt/11.0.2\", {alias = \"fmt\"}) add_requires(\"vcpkg::fmt\", {alia", "context": "", "use_case": "C/C++ builds and package management", "switched_from": "", "story": "I built a Cargo-like build tool for C/C++"}, {"id": 761066288, "item_id": 47566643, "url": "https://news.ycombinator.com/item?id=47566643", "by": "AyanamiKaine", "date": "2026-03-29", "stance": "recommend", "quote": "I use them in new projects using XMake and it just works.", "excerpt": "Can you explain why you think modules are a failed idea? Because not that many use them right now? Personally I use them in new projects using XMake and it just works.", "context": "", "use_case": "", "switched_from": "", "story": "C++26 is done ISO C++ standards meeting, Trip Report"}, {"id": 748994208, "item_id": 46812138, "url": "https://news.ycombinator.com/item?id=46812138", "by": "danny0z", "date": "2026-01-29", "stance": "recommend", "quote": "It also supports this syntax.", "excerpt": "It also supports this syntax. target(\"foo\", { kind = \"binary\", files = { \"src/*.cpp\" }, includedirs = { \"src\" }, defines = { \"FOO\", \"BAR=BAZ\" }, }) https://xmake.io/guide/project-configuration/syntax-description.html#syntax-simplification", "context": "", "use_case": "cross-platform build automation", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748991872, "item_id": 46811992, "url": "https://news.ycombinator.com/item?id=46811992", "by": "einpoklum", "date": "2026-01-29", "stance": "compare", "quote": "the API seems to be less flexible/rich than CMake's", "excerpt": "So, digging through the website git repo a bit, some basic facts: * The project started almost 11 years ago, in 2015. * Code is almost exclusively by one person, waruqi: https://github.com/waruqi , with several other people making a few contribution. * Prima facie, the API seems to be less flexible/rich than CMake's, but I'm not sure. * It says it supports \"C/C++\" (that slash is fishy, they're not that similar these ", "context": "", "use_case": "", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748975632, "item_id": 46810977, "url": "https://news.ycombinator.com/item?id=46810977", "by": "danny0z", "date": "2026-01-29", "stance": "neutral", "quote": "It supports this syntax.", "excerpt": "> not have `target(\"name\", function (ctx) ... end)`. It supports this syntax. https://xmake.io/guide/project-configuration/syntax-description.html#optional-scope-configuration-syntax target(\"foo\", function () set_kind(\"binary\") add_files(\"src/*.cpp\") add_defines(\"FOO\") end)", "context": "", "use_case": "", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748973600, "item_id": 46810850, "url": "https://news.ycombinator.com/item?id=46810850", "by": "warmwaffles", "date": "2026-01-29", "stance": "recommend", "quote": "I use it for personal projects and I find it substantially easier to mess around with compiling shaders", "excerpt": "I use it for personal projects and I find it substantially easier to mess around with compiling shaders to SPIRV, processing assets, etc... But some of my gripes are, although it _is_ lua, there is some magic fuckery going on. When you specify targets, things for that target need to be close to the definition, and it feels very odd in a lua language to not have `target(\"name\", function (ctx) ... end)`. Anyways, not g", "context": "", "use_case": "personal build projects", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748927488, "item_id": 46807968, "url": "https://news.ycombinator.com/item?id=46807968", "by": "danny0z", "date": "2026-01-29", "stance": "recommend", "quote": "It can generate a Visual Studio project, then use the xmake CLI to integrate and compile the project", "excerpt": "It can generate a Visual Studio project, then use the xmake CLI to integrate and compile the project, and supports debugging and IntelliSense. https://xmake.io/guide/extensions/builtin-plugins.html#generate-visualstudio-project C++ Modules examples: https://xmake.io/examples/cpp/cxx-modules.html https://github.com/xmake-io/xmake/tree/dev/tests/projects/c%2B%2B/modules", "context": "", "use_case": "cross-platform builds", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748919216, "item_id": 46807451, "url": "https://news.ycombinator.com/item?id=46807451", "by": "elitepleb", "date": "2026-01-29", "stance": "neutral", "quote": "it has a feature to output such files", "excerpt": "it has a feature to output such files, see https://github.com/xmake-io/xmake?tab=readme-ov-file#generate-ide-project-file-pluginmakefile-vs2002---vs2026--", "context": "", "use_case": "Cross-platform build", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}, {"id": 748910384, "item_id": 46806899, "url": "https://news.ycombinator.com/item?id=46806899", "by": "janjones", "date": "2026-01-28", "stance": "neutral", "quote": "Then you are already using XMake, it's the original codename for MSBuild", "excerpt": "Then you are already using XMake, it's the original codename for MSBuild, still present in the code: https://github.com/dotnet/msbuild/blob/main/src/MSBuild/XMake.cs :)", "context": "", "use_case": "", "switched_from": "", "story": "Xmake: A cross-platform build utility based on Lua"}]}