When working on projects, it’s often useful to be able to repeatedly run a command on some number of input files. Given that such a command depends only on those input files, we only need to rerun the command when one of the inputs changes.
Using a Makefile makes this process much easier to manage; programmers can list the commands and dependencies in a Makefile and can then rely on the Makefile to only rerun commands as necessary. This is typically a useful tool when compiling code (listing the code files once in a Makefile is much easier than listing them all out in the shell everytime you want to compile!), but this is far from the only use for Makefiles.
makeand write Makefiles