Last updated on 2023-04-24 | Edit this page
- What are the advantages and disadvantages of using tools like Make?
- Understand advantages of automated build tools such as Make.
Automated build tools such as Make can help us in a number of ways. They help us to automate repetitive commands, hence saving us time and reducing the likelihood of errors compared with running these commands manually.
They can also save time by ensuring that automatically-generated artifacts (such as data files or plots) are only recreated when the files that were used to create these have changed in some way.
Through their notion of targets, dependencies, and actions, they serve as a form of documentation, recording dependencies between code, scripts, tools, configurations, raw data, derived data, plots, and papers.
Add new rules, update existing rules, and add new variables to:
- Remove all auto-generated files (
Finally, many Makefiles define a default phony target called
all as first target, that will build what the Makefile has
been written to build (e.g. in our case, the
.png files and
results.txt file). As others may assume your Makefile
conforms to convention and supports an
all target, add an
all target to your Makefile (Hint: this rule has the
results.txt file and the
.png files as
dependencies, but no actions). With that in place, instead of running
make results.txt, you should now run
or just simply
make. By default,
make runs the
first target it finds in the Makefile, in this case your new
The following figure shows the dependencies involved in building the
all target, once we’ve added support for images:
Often it is useful to create an archive file of your project that includes all data, code and results. An archive file can package many files into a single file that can easily be downloaded and shared with collaborators. We can add steps to create the archive file inside the Makefile itself so it’s easy to update our archive file as the project changes.
Edit the Makefile to create an archive file of your project. Add new rules, update existing rules and add new variables to:
Create a new directory called
zipf_analysisin the project directory.
Copy all our code, data, plots, the Zipf summary table, the Makefile and config.mk to this directory. The
cp -rcommand can be used to copy files and directories into the new
$ cp -r [files and directories to copy] zipf_analysis/
Hint: create a new variable for the
booksdirectory so that it can be copied to the new
Create an archive,
zipf_analysis.tar.gz, of this directory. The bash command
tarcan be used, as follows:
$ tar -czf zipf_analysis.tar.gz zipf_analysis
Update the target
allso that it creates
make cleanis called.
Print the values of any additional variables you have defined when
make variablesis called.
Our code files (
testzipf.py) implement the
individual parts of our workflow. They allow us to create
.dat files from
.txt files, and
.png files from
.dat files. Our Makefile, however, documents dependencies
between our code, raw data, derived data, and plots, as well as
implementing our workflow as a whole.
configuration information for our Makefile, so it must be archived
A directory’s timestamp is not automatically updated when files are
copied into it. If the code, data, plots, and summary table are updated
and copied into the archive directory, the archive directory’s timestamp
must be updated with
touch so that the rule that makes
zipf_analysis.tar.gz knows to run again; without this
zipf_analysis.tar.gz will only be
created the first time the rule is run and will not be updated on
subsequent runs even if the contents of the archive directory have