The Unreasonable Effectiveness of Makefiles
My most horrible abuse of `make` was to write a batch job runner.<p>Most of the targets in the Makefile had a command to kick off the job and wait for it to finish (this was accomplished with a Python script since kicking off a job involved telling another application to run the job) followed by a `touch $@` so that make would know which jobs it had successfully run.  If a process had dependencies these were declared as you'd expect.<p>The other targets in the Makefile lashed those together into groups of processes, all the way up to individual days and times.  So "monday-9pm" might run "daily-batch", "daily-batch" would have "daily-batch-part-1" (etc), and each "daily-batch-part-..." would list individual jobs.<p>It was awful.  It still is awful because it works so well that there's been no need to replace it.  I keep having dreams of replacing it, but like they say there's nothing more permanent than a temporary solution.<p>All of this was inspired by someone who replaced the rc scripts in their init system with a Makefile in order to allow processes to start in parallel while keeping the dependencies in the right order.