A Tutorial on Portable Makefiles

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • just

    🤖 Just a command runner

  • I use "just" for this purpose, and I'm very happy with it:

    https://github.com/casey/just

  • Redis

    Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.

  • > …but, make doesn’t scale;

    What about redis?

    https://github.com/redis/redis/blob/unstable/src/Makefile

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • ninja

    a small build system with a focus on speed

  • Recovering an ancient project (K&R C !) sent me back down the "which build tool should I be using?" rabbit hole. First approximation: No one's happy with any tool, with good reason. Then I discovered Ninja. It's an assembly language for builds, advertised as a back end for higher level tools, but many people script Ninja themselves in their favorite language.

    Ninja is exceptionally fast, and handles parallelism extraordinarily well. It scales; they use it for Google Chrome. Various tools such as CMake can target Ninja. It is unique for its design goals.

    Most importantly, looking at Ninja code is not a "Just kill me now!" experience.

    https://ninja-build.org/

  • xmake

    🔥 A cross-platform build utility based on Lua

  • No DSL it's just Lua, dead simple yet featureful, and it is ninja fast, or at least claims to be I never bothered to check that out, it's fast enough for me.

    https://xmake.io/#/

  • clp

    writes input files to stdout with syntax highlighting (by jpe90)

  • I recently learned more Makefiles by using them for a recent project of mine. I wish I had seen this when I was working on it! I learned (stole) from the musl libc configure script and makefile instead.

    Makefiles aren't as easy to work with as alternatives in other language ecosystems, but I found they let me do a lot without the need for extra dependencies.

    Coincidentally the author of this blog post commented on one of my reddit posts and helped me work out a few kinks in the project.

    https://github.com/jpe90/clp

  • Task

    A task runner / simpler Make alternative written in Go

  • https://taskfile.dev/ has been my go to for this.

  • oil

    Oils is our upgrade path from bash to a better language and runtime. It's also for Python and JavaScript users who avoid shell!

  • The variants control the compile and link flags: https://github.com/oilshell/oil/blob/master/cpp/NINJA-steps....

    Overall this is the best build system I've used :) My pet peeve is having to clean when changing the variant.

    I'm sure it's reinventing some of the 120K lines of CMakeLists.txt that comes with CMake, but I don't have to learn and debug a wonky shell-ish language!

    One downside is that you probably don't want to invoke shell on Windows. I find that very useful though, so I'm not sure what would replace it on Windows. (I guess batch files, but I don't think they're powerful enough)

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • liblinux

    Discontinued Linux system calls.

  • That's awesome. I didn't know about rwildcard until now. Is it part of GMSL? I searched for rwildcard on gmsl.sourceforge.io but didn't find it.

    I think my function is needlessly complicated compared to rwildcard. Here's my code:

    https://github.com/matheusmoreira/liblinux/blob/modular-buil...

    https://github.com/matheusmoreira/liblinux/blob/modular-buil...

    The file? and directory? functions were inspired by GMSL.

    I wrote a general recursion function. It takes a function to apply to lists and a function to compute whether an element is a base case.

    The recursive file system traversal function applies a directory globbing function to the list of paths and has file? as base case.

    The find function filters out any items not matching a given predicate function. It was my intention to provide predicates like C_file? and header_file? but I stopped developing that project before that happened.

    I think rwildcard is probably simpler and more efficient!

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts