diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d7e322 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.make-and-exec-binaries diff --git a/.make-and-exec b/.make-and-exec new file mode 100755 index 0000000..a88a967 --- /dev/null +++ b/.make-and-exec @@ -0,0 +1,10 @@ +#!/bin/bash +# Usage: create a file foo.c, make foo a symlink to this script +# When foo is executed, this script silently compiles foo.c into .make-and-exec-binaries/foo and execs that with the arguments provided. +# The compilation goes through make, so later invocations directly exec the binary with little delay. +# To customise the compilation, you can set a CFLAGS env var before running foo. +set -e +name="$(basename "$0")" +cd "$(dirname "$0")" +make --file .make-and-exec-Makefile --silent ".make-and-exec-binaries/${name}" +exec "./.make-and-exec-binaries/${name}" "$@" diff --git a/.make-and-exec-Makefile b/.make-and-exec-Makefile new file mode 100644 index 0000000..3a56375 --- /dev/null +++ b/.make-and-exec-Makefile @@ -0,0 +1,4 @@ +.make-and-exec-binaries/%: %.c .%-test + mkdir -p .make-and-exec-binaries + $(CC) -O3 -o $@ $< $(CFLAGS) + ./.$(notdir $(@))-test