The document introduces makefiles and their use in managing complex software projects with multiple files and programmers. It describes that makefiles describe a project's structure and instructions for compiling files. Rules in makefiles specify targets, prerequisites, and recipes to create targets that are older than their prerequisites. The make command uses the makefile to determine what needs to be recompiled and executes the recipes to rebuild targets efficiently.
2. Motivation
Small programs -> single file -> manual compilation
“not so small” programs
many files
multiple components
more than one programmers
Ray Song Introduction to Makefile
3. Motivation
Small programs -> single file -> manual compilation
“not so small” programs
many files
multiple components
more than one programmers
Ray Song Introduction to Makefile
4. Motivation
Small programs -> single file -> manual compilation
“not so small” programs
many files
multiple components
more than one programmers
Ray Song Introduction to Makefile
5. Motivation
Small programs -> single file -> manual compilation
“not so small” programs
many files
multiple components
more than one programmers
Ray Song Introduction to Makefile
6. Motivation
Small programs -> single file -> manual compilation
“not so small” programs
many files
multiple components
more than one programmers
Ray Song Introduction to Makefile
7. Motivation - cont.
Problems
harder to manage
every change require long compilation
division to components is desired
Ray Song Introduction to Makefile
8. Motivation - cont.
Problems
harder to manage
every change require long compilation
division to components is desired
Ray Song Introduction to Makefile
9. Motivation - cont.
Problems
harder to manage
every change require long compilation
division to components is desired
Ray Song Introduction to Makefile
10. Motivation - cont.
Problems
harder to manage
every change require long compilation
division to components is desired
Ray Song Introduction to Makefile
12. Makefile
Makefile describes
project structure
instructions for files creation
A makefile consists of many rules.
Ray Song Introduction to Makefile
13. Makefile
Makefile describes
project structure
instructions for files creation
A makefile consists of many rules.
Ray Song Introduction to Makefile
14. Makefile
Makefile describes
project structure
instructions for files creation
A makefile consists of many rules.
Ray Song Introduction to Makefile
15. Makefile
Makefile describes
project structure
instructions for files creation
A makefile consists of many rules.
Ray Song Introduction to Makefile
16. Rule syntax
TARGETS: PREREQUISITES
RECIPE
In short, each rule describe instructions (RECIPE) to create
files (TARGETS) with PREREQUISITES.
PREREQUISITES are targets must be created prior to
TARGETS.
A target is considered old if its modification timestamp is
smaller than one of its dependencies’s.
Ray Song Introduction to Makefile
17. Rule syntax
TARGETS: PREREQUISITES
RECIPE
In short, each rule describe instructions (RECIPE) to create
files (TARGETS) with PREREQUISITES.
PREREQUISITES are targets must be created prior to
TARGETS.
A target is considered old if its modification timestamp is
smaller than one of its dependencies’s.
Ray Song Introduction to Makefile
18. Rule syntax
TARGETS: PREREQUISITES
RECIPE
In short, each rule describe instructions (RECIPE) to create
files (TARGETS) with PREREQUISITES.
PREREQUISITES are targets must be created prior to
TARGETS.
A target is considered old if its modification timestamp is
smaller than one of its dependencies’s.
Ray Song Introduction to Makefile
19. Makefile – cont.
TARGETS and PREREQUISITES are file names separated
by spaces.
Usually there is only one target per rule.
TARGETS and PREREQUISITES may contain wildcards,
e.g. %.c.
Each line of RECIPE starts with a TAB.
The first rule indicates the default target (not counting
targets that contain wildcards).
Ray Song Introduction to Makefile
20. Makefile – cont.
TARGETS and PREREQUISITES are file names separated
by spaces.
Usually there is only one target per rule.
TARGETS and PREREQUISITES may contain wildcards,
e.g. %.c.
Each line of RECIPE starts with a TAB.
The first rule indicates the default target (not counting
targets that contain wildcards).
Ray Song Introduction to Makefile
21. Makefile – cont.
TARGETS and PREREQUISITES are file names separated
by spaces.
Usually there is only one target per rule.
TARGETS and PREREQUISITES may contain wildcards,
e.g. %.c.
Each line of RECIPE starts with a TAB.
The first rule indicates the default target (not counting
targets that contain wildcards).
Ray Song Introduction to Makefile
22. Makefile – cont.
TARGETS and PREREQUISITES are file names separated
by spaces.
Usually there is only one target per rule.
TARGETS and PREREQUISITES may contain wildcards,
e.g. %.c.
Each line of RECIPE starts with a TAB.
The first rule indicates the default target (not counting
targets that contain wildcards).
Ray Song Introduction to Makefile
23. Makefile – cont.
TARGETS and PREREQUISITES are file names separated
by spaces.
Usually there is only one target per rule.
TARGETS and PREREQUISITES may contain wildcards,
e.g. %.c.
Each line of RECIPE starts with a TAB.
The first rule indicates the default target (not counting
targets that contain wildcards).
Ray Song Introduction to Makefile
24. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
25. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
26. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
27. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
28. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
29. make’s mechanism
make command reads a makefile and records these rules into
its data base.
GNU Make defaults to search GNUmakefile, makefile,
Makefile in order, use the first of these which exists.
The first goal (terminology used to refer to the list of targets
you specified on the command line) should be created.
Prerequisites which appeared in the target must be processed
first.
This is a recursive process (depth first search).
After updating the dependencies , make decides whether it is
necessary to recreated the target. This is the case when it is
older than one of its dependencies. In the case we recreate
the target, execute the associated recipe.
Ray Song Introduction to Makefile
30. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
31. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
32. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
33. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
34. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
35. make’s mechanism - cont.
make virtually construct a dependency DAG (directed acyclic
graph).
make ensures minimum compilation as long as the project
structure is written properly.
Do not write something like:
prog: main.c sum1.c sum2.c
gcc –o prog main.c sum1.c sum2.c
which requires compilation of all project when something is
changed
Ray Song Introduction to Makefile
36. Automatic variables
$@
$ˆ
$<
others including $, $?, $+, $|, $%, $(%D), %(F), . . .
Ray Song Introduction to Makefile
37. Automatic variables
$@
$ˆ
$<
others including $, $?, $+, $|, $%, $(%D), %(F), . . .
Ray Song Introduction to Makefile
38. Automatic variables
$@
$ˆ
$<
others including $, $?, $+, $|, $%, $(%D), %(F), . . .
Ray Song Introduction to Makefile
39. Automatic variables
$@
$ˆ
$<
others including $, $?, $+, $|, $%, $(%D), %(F), . . .
Ray Song Introduction to Makefile
40. Example
convert: cmdline.o convert.o
g++ $ˆ -o $@
convert.o: convert.cpp convert.h
g++ -c $<
cmdline.o: cmdline.cpp cmdline.h convert.h
g++ -c $<
Ray Song Introduction to Makefile
41. Equivalent (implicit rules)
make can dedude appropriate recipes according to suffixes
convert: cmdline.o convert.o
convert.o: convert.cpp convert.h
cmdline.o: cmdline.cpp cmdline.h convert.h
Ray Song Introduction to Makefile
42. Equivalent (implicit rules) - cont.
convert: cmdline.o
convert.o: convert.h
cmdline.o: cmdline.h convert.h
Ray Song Introduction to Makefile
43. Another example
%.o: %.c
gcc -c $<
Ray Song Introduction to Makefile
44. Passing parameters
test: FORCE
echo $(VAR)
FORCE:
make VAR=hello
make VAR=world
Ray Song Introduction to Makefile
45. Passing parameters
test: FORCE
echo $(VAR)
FORCE:
make VAR=hello
make VAR=world
Ray Song Introduction to Makefile
46. Force targets
Targets without recipes or prerequisites
Ray Song Introduction to Makefile
47. Phony targets
They do not correspond to real file.
Provide some utility, e.g. cleaning intermediate files, archiving
the whole project, creating TAGS file for some editors
Forced to run its recipe upon executing.
Ray Song Introduction to Makefile
48. Phony targets
They do not correspond to real file.
Provide some utility, e.g. cleaning intermediate files, archiving
the whole project, creating TAGS file for some editors
Forced to run its recipe upon executing.
Ray Song Introduction to Makefile
49. Phony targets
They do not correspond to real file.
Provide some utility, e.g. cleaning intermediate files, archiving
the whole project, creating TAGS file for some editors
Forced to run its recipe upon executing.
Ray Song Introduction to Makefile
50. Example
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
Ray Song Introduction to Makefile
51. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
52. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
53. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
54. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
55. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
56. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
57. Practical options of make
-n, print the commands to be run but do not execute them
-t, touch files instead of running the recipes
-B, unconditionally make all targets (overide timestamps)
-W file, pretend file has been just modified
-p, print the data base that results from reading the makefiles
-d, debug mode
others, RTFM
Ray Song Introduction to Makefile
58. Other usage
Makefile’s mechanism is not limited to programs
LaTeX sources
website deployment
describe any task where some files need updating as a result of
changes of other files
Ray Song Introduction to Makefile
59. Other usage
Makefile’s mechanism is not limited to programs
LaTeX sources
website deployment
describe any task where some files need updating as a result of
changes of other files
Ray Song Introduction to Makefile
60. Other usage
Makefile’s mechanism is not limited to programs
LaTeX sources
website deployment
describe any task where some files need updating as a result of
changes of other files
Ray Song Introduction to Makefile
61. Other usage
Makefile’s mechanism is not limited to programs
LaTeX sources
website deployment
describe any task where some files need updating as a result of
changes of other files
Ray Song Introduction to Makefile
62. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
63. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
64. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
65. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
66. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
67. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
68. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
69. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
70. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
71. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
72. Additional features
Variables (two flavors: simple and recursive, the latter is also
called macros)
Functions including string substitution, file name
manipulation, foreach, even the the root of evil – eval
VPATH
Ability to manipulate archives(.a)
Including other makefiles
Conditionals
Secondary expansion
Order-only prerequisites
Static patterns
Double-colon rules
Target/pattern-specific variable values
Ray Song Introduction to Makefile
73. Acknowledgements
This slide incorporate some stuff from Roded Sharan’s
http://www.cs.tau.ac.il/~roded/courses/softp-b06/
Makefile.ppt
Markdown
http://daringfireball.net/projects/markdown/ in
which this slide source is written.
Pandoc http://johnmacfarlane.net/pandoc/ by which
this slide is generated.
Haskell http://www.haskell.org/ in which Pandoc is
implemented.
Ray Song Introduction to Makefile
74. Acknowledgements
This slide incorporate some stuff from Roded Sharan’s
http://www.cs.tau.ac.il/~roded/courses/softp-b06/
Makefile.ppt
Markdown
http://daringfireball.net/projects/markdown/ in
which this slide source is written.
Pandoc http://johnmacfarlane.net/pandoc/ by which
this slide is generated.
Haskell http://www.haskell.org/ in which Pandoc is
implemented.
Ray Song Introduction to Makefile
75. Acknowledgements
This slide incorporate some stuff from Roded Sharan’s
http://www.cs.tau.ac.il/~roded/courses/softp-b06/
Makefile.ppt
Markdown
http://daringfireball.net/projects/markdown/ in
which this slide source is written.
Pandoc http://johnmacfarlane.net/pandoc/ by which
this slide is generated.
Haskell http://www.haskell.org/ in which Pandoc is
implemented.
Ray Song Introduction to Makefile
76. Acknowledgements
This slide incorporate some stuff from Roded Sharan’s
http://www.cs.tau.ac.il/~roded/courses/softp-b06/
Makefile.ppt
Markdown
http://daringfireball.net/projects/markdown/ in
which this slide source is written.
Pandoc http://johnmacfarlane.net/pandoc/ by which
this slide is generated.
Haskell http://www.haskell.org/ in which Pandoc is
implemented.
Ray Song Introduction to Makefile
77. References
GNU Make Manual
http://www.gnu.org/software/make/manual/
Ray Song Introduction to Makefile