kota's memex

https://ninja-build.org/ https://git.sr.ht/~mcf/samurai

In essence, Ninja is meant to replace Make, which is slow when performing incremental (or no-op) builds. This can considerably slow down developers working on large projects, such as Google Chrome which compiles 40,000 input files into a single executable. In fact, Google Chrome is a main user and motivation for Ninja. It's also used to build Android (via Makefile translation by Kati), and is used by most developers working on LLVM.

In contrast to Make, Ninja lacks features such as string manipulation, as Ninja build files are not meant to be written by hand. Instead, a "build generator" should be used to generate Ninja build files. Gyp, CMake, Meson, and gn are popular build management software tools which support creating build files for Ninja.

Example:

rule cc
  command = gcc -c -o $out $in
  description = CC $out

rule link
  command = gcc -o $out $in
  description = LINK $out

build source1.o: cc source1.c
build source2.o: cc source2.c
build myprogram: link source1.o source2.o

LSP support

Normally you would generate the compile_commands.json file from meson, cmake, or whatever, but if the project uses ninja ONLY, you can do the following: ninja -C out/Release -t compdb cxx cc > compile_commands.json