DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(make.info.gz) Simple Makefile

Info Catalog (make.info.gz) Rule Introduction (make.info.gz) Introduction (make.info.gz) How Make Works
 
 2.2 A Simple Makefile
 =====================
 
 Here is a straightforward makefile that describes the way an executable
 file called `edit' depends on eight object files which, in turn, depend
 on eight C source and three header files.
 
    In this example, all the C files include `defs.h', but only those
 defining editing commands include `command.h', and only low level files
 that change the editor buffer include `buffer.h'.
 
      edit : main.o kbd.o command.o display.o \
             insert.o search.o files.o utils.o
              cc -o edit main.o kbd.o command.o display.o \
                         insert.o search.o files.o utils.o
 
      main.o : main.c defs.h
              cc -c main.c
      kbd.o : kbd.c defs.h command.h
              cc -c kbd.c
      command.o : command.c defs.h command.h
              cc -c command.c
      display.o : display.c defs.h buffer.h
              cc -c display.c
      insert.o : insert.c defs.h buffer.h
              cc -c insert.c
      search.o : search.c defs.h buffer.h
              cc -c search.c
      files.o : files.c defs.h buffer.h command.h
              cc -c files.c
      utils.o : utils.c defs.h
              cc -c utils.c
      clean :
              rm edit main.o kbd.o command.o display.o \
                 insert.o search.o files.o utils.o
 
 We split each long line into two lines using backslash-newline; this is
 like using one long line, but is easier to read.  
 
    To use this makefile to create the executable file called `edit',
 type:
 
      make
 
    To use this makefile to delete the executable file and all the object
 files from the directory, type:
 
      make clean
 
    In the example makefile, the targets include the executable file
 `edit', and the object files `main.o' and `kbd.o'.  The prerequisites
 are files such as `main.c' and `defs.h'.  In fact, each `.o' file is
 both a target and a prerequisite.  Commands include `cc -c main.c' and
 `cc -c kbd.c'.
 
    When a target is a file, it needs to be recompiled or relinked if any
 of its prerequisites change.  In addition, any prerequisites that are
 themselves automatically generated should be updated first.  In this
 example, `edit' depends on each of the eight object files; the object
 file `main.o' depends on the source file `main.c' and on the header
 file `defs.h'.
 
    A shell command follows each line that contains a target and
 prerequisites.  These shell commands say how to update the target file.
 A tab character must come at the beginning of every command line to
 distinguish command lines from other lines in the makefile.  (Bear in
 mind that `make' does not know anything about how the commands work.
 It is up to you to supply commands that will update the target file
 properly.  All `make' does is execute the commands in the rule you have
 specified when the target file needs to be updated.)  
 
    The target `clean' is not a file, but merely the name of an action.
 Since you normally do not want to carry out the actions in this rule,
 `clean' is not a prerequisite of any other rule.  Consequently, `make'
 never does anything with it unless you tell it specifically.  Note that
 this rule not only is not a prerequisite, it also does not have any
 prerequisites, so the only purpose of the rule is to run the specified
 commands.  Targets that do not refer to files but are just actions are
 called "phony targets".   Phony Targets, for information about
 this kind of target.   Errors in Commands Errors, to see how to
 cause `make' to ignore errors from `rm' or any other command.  
 
Info Catalog (make.info.gz) Rule Introduction (make.info.gz) Introduction (make.info.gz) How Make Works
automatically generated byinfo2html