Automating Tasks with make
Learn how to use the make command to automate tasks.
We'll cover the following
The make
command
The make
command is an automation tool aimed at creating builds for software. It’s commonly used to compile and install software. Package managers often don’t have the latest version of a particular piece of software available, so the only way to install the most recent version is to download the source code and compile it ourselves. The process usually involves downloading the source code archive, extracting it, switching to the directory containing the code, running a script called configure
to set some variables based on our environment, and running make
to compile the software. It usually looks something like this:
$ ./configure
$ make
$ sudo make install
The make
command works by reading a file named Makefile
and looking for tasks to run. We create these tasks by defining rules that tell make
what commands to run to produce the desired result. Most of the time, we define rules by specifying files we want to create. These are called targets.
Here’s an example of a rule:
%.class : %.java javac $<
This rule compiles a Java class from a source file. To run this, we type make Hello.class
. Then, make
would look for a file named Hello.java
The $<
variable represents the input file.
Here’s another example:
book.md:
cat chapter1.md chapter2.md chapter3.md chapter4.md > $@
This rule describes making a file named book.md
by concatenating four Markdown files. The $@
variable in this rule references the name of the output file. To run it, we type make book.md
.
We can use Makefiles to automate all sorts of tasks. To explore how Makefiles work, we’ll create a very basic static site generator. We’ll have files containing a generic header and a footer that we’ll use on all of our pages. Then, we’ll have some files that contain just the content we want to use. Our Makefile will let us take the content and apply the template, creating a full HTML page. And for completeness, we’ll add a rule that builds all of the pages for the site. The directory structure for the project will look like this:
Get hands-on with 1400+ tech skills courses.