Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Makefile

MaskRay
November 11, 2012

Introduction to Makefile

Introduction to Makefile

MaskRay

November 11, 2012
Tweet

More Decks by MaskRay

Other Decks in Programming

Transcript

  1. Introduction to Makefile
    Ray Song
    February 25, 2012
    Ray Song Introduction to Makefile

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  7. Motivation - cont.
    Problems
    harder to manage
    every change require long compilation
    division to components is desired
    Ray Song Introduction to Makefile

    View Slide

  8. Motivation - cont.
    Problems
    harder to manage
    every change require long compilation
    division to components is desired
    Ray Song Introduction to Makefile

    View Slide

  9. Motivation - cont.
    Problems
    harder to manage
    every change require long compilation
    division to components is desired
    Ray Song Introduction to Makefile

    View Slide

  10. Motivation - cont.
    Problems
    harder to manage
    every change require long compilation
    division to components is desired
    Ray Song Introduction to Makefile

    View Slide

  11. Motivation - cont.
    Solution - Makefile
    Ray Song Introduction to Makefile

    View Slide

  12. Makefile
    Makefile describes
    project structure
    instructions for files creation
    A makefile consists of many rules.
    Ray Song Introduction to Makefile

    View Slide

  13. Makefile
    Makefile describes
    project structure
    instructions for files creation
    A makefile consists of many rules.
    Ray Song Introduction to Makefile

    View Slide

  14. Makefile
    Makefile describes
    project structure
    instructions for files creation
    A makefile consists of many rules.
    Ray Song Introduction to Makefile

    View Slide

  15. Makefile
    Makefile describes
    project structure
    instructions for files creation
    A makefile consists of many rules.
    Ray Song Introduction to Makefile

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  36. Automatic variables
    [email protected]

    $<
    others including $, $?, $+, $|, $%, $(%D), %(F), . . .
    Ray Song Introduction to Makefile

    View Slide

  37. Automatic variables
    [email protected]

    $<
    others including $, $?, $+, $|, $%, $(%D), %(F), . . .
    Ray Song Introduction to Makefile

    View Slide

  38. Automatic variables
    [email protected]

    $<
    others including $, $?, $+, $|, $%, $(%D), %(F), . . .
    Ray Song Introduction to Makefile

    View Slide

  39. Automatic variables
    [email protected]

    $<
    others including $, $?, $+, $|, $%, $(%D), %(F), . . .
    Ray Song Introduction to Makefile

    View Slide

  40. Example
    convert: cmdline.o convert.o
    g++ $ˆ -o [email protected]
    convert.o: convert.cpp convert.h
    g++ -c $<
    cmdline.o: cmdline.cpp cmdline.h convert.h
    g++ -c $<
    Ray Song Introduction to Makefile

    View Slide

  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

    View Slide

  42. Equivalent (implicit rules) - cont.
    convert: cmdline.o
    convert.o: convert.h
    cmdline.o: cmdline.h convert.h
    Ray Song Introduction to Makefile

    View Slide

  43. Another example
    %.o: %.c
    gcc -c $<
    Ray Song Introduction to Makefile

    View Slide

  44. Passing parameters
    test: FORCE
    echo $(VAR)
    FORCE:
    make VAR=hello
    make VAR=world
    Ray Song Introduction to Makefile

    View Slide

  45. Passing parameters
    test: FORCE
    echo $(VAR)
    FORCE:
    make VAR=hello
    make VAR=world
    Ray Song Introduction to Makefile

    View Slide

  46. Force targets
    Targets without recipes or prerequisites
    Ray Song Introduction to Makefile

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  77. References
    GNU Make Manual
    http://www.gnu.org/software/make/manual/
    Ray Song Introduction to Makefile

    View Slide