cc-clean(){ rm -rf *.out 2>/dev/null } cc-run(){ local file if [ -z "$1" ]; then echo "Usage: cc-run [args...]" >&2 return 1 fi cc-clean file="$1" shift cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror && \ "./${file}.out" "$@" cc-clean } cc-run-test(){ local file if [ -z "$1" ]; then echo "Usage: cc-run [args...]" >&2 return 1 fi cc-clean file="$1" shift if command -v norminette &>/dev/null then norminette "${file}" fi cc -std=c99 "${file}" -o "${file}.out" -Wall -Wextra -Werror -DTEST=please && \ "./${file}.out" "$@" cc-clean } cc-run-lax(){ local file if [ -z "$1" ]; then echo "Usage: cc-run [args...]" >&2 return 1 fi cc-clean file="$1" shift if command -v norminette &>/dev/null then norminette "${file}" fi cc -std=c99 "${file}" -o "${file}.out" -DTEST=please && \ "./${file}.out" "$@" cc-clean } cc-test(){ local test base cc-clean if ! ls *_test.c >/dev/null 2>&1; then echo "No _test.c files found" >&2 return 1 fi for test in *_test.c; do base="${test%.c}" cc "${test}" -o "${base}.out" -Wall -Wextra -Werror done for test in *_test.out; do "./${test}" done # cc-clean }