Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
93 lines (60 sloc) 2.22 KB
title author
Dependent Targets
Gaston Sanchez

Learning Objectives

  • Defining targets that depend on other targets
  • Write a Makefile with various dependent targets

More than one target

All of the previous examples have been about Makefiles that use one or more independent targets.

Now let's consider a couple of targets in which some of them play the role of dependencies for other targets.

In this case we will work with a toy data analysis in R. More specifically, we will perform a regresison analysis on simulated data.

Toy Regression in R

The code of the analysis is:

# random data
x <- rnorm(20)
y <- x + rnorm(20)

# regression line
reg <- lm(y ~ x)

# scatter diagram with fitted regression line
plot(x, y, las = 1, pch = 19, col = "#555555")
abline(reg, col = "#0000DD70", lwd = 3)

For illustration purposes, the previous code has been split into three R scripts, each producing an output file:

| regression-data.R > regression.RData | regression-model.R > | regression-plot.R > scatterplot.png

You can see the files of this example in the folder 04-dependent-targets/

Input and Output files

  • regression-data.R generates the random vectors, fits the regression model, and sends the data and the model to a binary file regression.RData

  • regression-model.R reads in the regression data, and then sends the summary of the regression object to the file

  • regression-plot.R reads in the regression data, and creates a scatter plot that is saved in the file scatterplot.png

  • The main output is the file regression.html which depends directly on, and

  • The file, in turn, uses scatterplot.png


Here's the content of the Makefile:

all: regression.html

regression.html: scatterplot.png
	pandoc -s -o regression.html

scatterplot.png: regression-plot.R regression.RData
	Rscript regression-plot.R regression-model.R regression.RData
	Rscript regression-model.R

regression.RData: regression-data.R
	Rscript regression-data.R