Xmake: A cross-platform build utility based on Lua
xmake.io
xmake.io
CMake/autotools/Premake/SCons/waf/Ninja/Meson/GYP/qmake/Bazel... and now xmake.
I'd rather CMake just be improved, than see endless incompatible reinventions. If you'll forgive a little snark: on the plus side, it's unlikely this new challenger will see any real uptake.
From your list alone, cmake is the de-facto standard. All others are either defunct, abandoned, or dropped out of favour, or never had any expressive adoption. For instance autotools is largely a relic of back in the days where C++ was C with classes, and Qmake was already dropped by their makers in favour of cmake.
Additionally, some of your entries don't make much sense. For example, ninja is at most a low level alternative to raw makefiles, and in fact tools like cmake are able to generate either makefiles or ninja files, and GYP is just a high-level format designed to generate other build system project files, specially IDE-specific projects such as XCode and Visual Studio project files.
Minor point: autotools is a relic of the days when there were multiple, only somewhat compatible implementation of Unix in common use. Now that the world is a Linux monoculture and most software is installed by end users in the form of pre-built binary packages, the form of portability provided by autotools is no longer needed.
Most C++ code I've written has been Linux/Windows. I've never targeted other Unices, but they're out there, and I like to think my portable code would build under FreeBSD with minimal effort.
And binary packages are completely irrelevant and unrelated, because autotools is a build system, thus designed to help build software. Although the availability of source code packages enabled build systems to be also used as installers, thay does not mean the need for build systems is replaced with plain old installers.
So you're agreeing that, if we see a new challenger succeed, we pay the price of fragmentation?
I agree that these sorts of projects rarely gain any real traction.
I don't see that the history of autotools is relevant here. It's still very common to see in the wild.
To be fair, maven is in a class of its own with regards of designing a tool that is the worse of both worlds.
so do you instead write custom additional executables that may require a cross-compilation step for whenever you have to perform custom pre/postprocessing tasks on your code (e.g. parsing it, etc)
well, it has to be somewhere and i'd rather write my build configuration in a language instead of N. So yes, that's what I do currently and it causes me exactly zero issues.
If you build it, they will come. Don’t be surprised to find out that a good chunk of your business logic winds up in build files rather than what you would typically think of and analyze as your ‘source’.
Having friction to using bespoke compilation steps is a feature in my experience, it means that devs will use standard build elements whenever possible and if a problem occurs the "wildcard" external binaries can more easily be probed and reviewed.
Tbh, I was impressed by Xmake. All I need is a meaningful project to use it on.
For example, there's an nginx module that lets you use lua to configure the server logic. I'm presuming you don't need to have lua installed to use xmake (i.e. batteries included), otherwise you're a hundred percent correct.
https://github.com/xmake-io/xmake/blob/master/README.md#run-...
So, it would be a bit like if you built a build language atop Python, but rather than depending on Python, you made your whole build tool embed the entire CPython interpreter, pinned to some version. Lua is used in this way more commonly than Python is, of course.
So: xmake itself is just a C program with large submodules written in Lua, running inside that embedded Lua context. The upside here is that xmake's releases are just plain platform-specific native binaries that bundle everything you need, and that make no assumptions about your base system. This is a nice benefit in a build tool, as it aids in reproducible builds.
Anyway, a single executable makes it hard to argue, and in this case I agree with you and ggp.