make(1s) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

make(1s)

make(1S)                    SunOS Specific Commands                   make(1S)



NAME
       make - maintain, update, and regenerate related programs and files

SYNOPSIS
       /usr/bin/make [-d] [-dd] [-D] [-DD] [-e] [-i] [-k] [-n]
            [-p] [-P] [-q] [-r] [-s] [-S] [-t] [-u][-w] [-V]
            [-f makefile]... [-K statefile]... [target]...
            [macro = value...]


       /usr/xpg4/bin/make [-d] [-dd] [-D] [-DD] [-e] [-i] [-k]
            [-n] [-p] [-P] [-q] [-r] [-s] [-S] [-t] [-u][-w] [-V]
            [-f makefile]... [target]... [macro = value...]

DESCRIPTION
       The make utility executes a list of shell commands associated with each
       target, typically to create or update a file of the same name. makefile
       contains  entries  that  describe how to bring a target up to date with
       respect to those on which it depends, which  are  called  dependencies.
       Since each dependency is a target, it can have dependencies of its own.
       Targets, dependencies, and sub-dependencies comprise a  tree  structure
       that make traces when deciding whether or not to rebuild a target.


       The  make  utility recursively checks each target against its dependen‐
       cies, beginning with the first target entry in makefile  if  no  target
       argument  is  supplied on the command line. If, after processing all of
       its dependencies, a target file is found either to be missing, or to be
       older  than  any of its dependencies, make rebuilds it. Optionally with
       this version of make, a target can be treated as out-of-date  when  the
       commands  used to generate it have changed since the last time the tar‐
       get was built.


       To build a given target, make executes the list of commands,  called  a
       rule.  This  rule  can  be  listed  explicitly in the target's makefile
       entry, or it can be supplied implicitly by make.


       If no target is specified on the command line, make uses the first tar‐
       get defined in makefile.


       If  a  target  has no makefile entry, or if its entry has no rule, make
       attempts to derive a rule by each of the following  methods,  in  turn,
       until  a  suitable  rule is found. Each method is described under Usage
       below.

           o      Pattern matching rules.


           o      Implicit rules, read in from a user-supplied makefile.


           o      Standard implicit rules (also known as suffix rules),  typi‐
                  cally read in from the file /usr/share/lib/make/make.rules.


           o      SCCS  retrieval. make retrieves the most recent version from
                  the SCCS history file (if any). See the description  of  the
                  .SCCS_GET: special-function target for details.


           o      The  rule  from the .DEFAULT: target entry, if there is such
                  an entry in the makefile.



       If there is no makefile entry for a target, if no rule can  be  derived
       for building it, and if no file by that name is present, make issues an
       error message and halts.

OPTIONS
       The following options are supported:

       -d              Displays the reasons why make chooses to rebuild a tar‐
                       get.  make  displays  any and all dependencies that are
                       newer. In addition, make displays options read in  from
                       the MAKEFLAGS environment variable.


       -dd             Displays  the  dependency  check and processing in vast
                       detail.


       -D              Displays the text of the makefiles read in.


       -DD             Displays the text of the  makefiles,  make.rules  file,
                       the state file, and all hidden-dependency reports.


       -e              Environment variables override assignments within make‐
                       files.


       -f makefile     Uses the description file makefile. A − as the makefile
                       argument  denotes  the  standard input. The contents of
                       makefile, when present, override the  standard  set  of
                       implicit  rules  and  predefined macros. When more than
                       one -f  makefile argument pair appears, make  uses  the
                       concatenation of those files, in order of appearance.

                       When  no makefile is specified, /usr/bin/make tries the
                       following in sequence, except when in POSIX  mode  (see
                       .POSIX in Usage):


                           o      If  there  is  a  file named makefile in the
                                  working directory, make uses that file.  If,
                                  however,  there  is  an  SCCS  history  file
                                  (SCCS/s.makefile)  which  is   newer,   make
                                  attempts to retrieve and use the most recent
                                  version.


                           o      In the absence of the above  file(s),  if  a
                                  file  named Makefile is present in the work‐
                                  ing directory, make attempts to use  it.  If
                                  there  is an SCCS history file (SCCS/s.Make‐
                                  file)  that  is  newer,  make  attempts   to
                                  retrieve and use the most recent version.

                       When  no  makefile is specified, /usr/bin/make in POSIX
                       mode and /usr/xpg4/bin/make try the following files  in
                       sequence:

                           o      ./makefile, ./Makefile


                           o      s.makefile, SCCS/s.makefile


                           o      s.Makefile, SCCS/s.Makefile



       -i              Ignores error codes returned by commands. Equivalent to
                       the special-function target .IGNORE:.


       -k              When a nonzero error status is returned by a  rule,  or
                       when make cannot find a rule, abandons work on the cur‐
                       rent  target,  but  continues  with  other   dependency
                       branches that do not depend on it.


       -K statefile    Uses  the  state  file  statefile. A − as the statefile
                       argument denotes the standard input.  The  contents  of
                       statefile,  when  present, override the standard set of
                       implicit rules and predefined macros.  When  more  than
                       one  -K  statefile argument pair appears, make uses the
                       concatenation of those files, in order  of  appearance.
                       (See  also .KEEP_STATE and .KEEP_STATE_FILE in the Spe‐
                       cial-Function Targets section).


       -n              No execution mode. Prints commands, but does  not  exe‐
                       cute  them. Even lines beginning with an @ are printed.
                       However, if a command line contains a reference to  the
                       $(MAKE)  macro,  that  line is always executed (see the
                       discussion of MAKEFLAGS in Reading  Makefiles  and  the
                       Environment).  When in POSIX mode, lines beginning with
                       a "+" are executed.


       -p              Prints out the complete set of  macro  definitions  and
                       target descriptions.


       -P              Merely reports dependencies, rather than building them.


       -q              Question  mode.  make  returns a zero or nonzero status
                       code depending on whether or not the target file is  up
                       to date. When in POSIX mode, lines beginning with a "+"
                       are executed.


       -r              Does    not    read    in    the    default    makefile
                       /usr/share/lib/make/make.rules.


       -s              Silent  mode.  Does not print command lines before exe‐
                       cuting them. Equivalent to the special-function  target
                       .SILENT:.


       -S              Undoes  the  effect  of the -k option. Stops processing
                       when a non-zero exit status is returned by a command.


       -t              Touches the target files (bringing  them  up  to  date)
                       rather  than  performing their rules. Warning: This can
                       be dangerous when files are maintained by more than one
                       person.  When  the  .KEEP_STATE:  target appears in the
                       makefile, this option updates the state file just as if
                       the rules had been performed. When in POSIX mode, lines
                       beginning with a "+" are executed.


       -u              Unconditional build of targets. Even if a target is  up
                       to  date,  it  is  rebuilt.  This  might  be useful for
                       rebuilding all targets without cleaning.


       -V              Puts make into SysV mode.  Refer  to  sysV-make(1)  for
                       respective details.


       -w              Print a message containing the working directory before
                       and after other processing.  This  can  be  useful  for
                       tracking  down  errors from complicated nests of recur‐
                       sive make commands.


       -x              Puts make into the specified  compatibility  mode.  The
                       following compatibility modes are supported:

                           1.     Compatibility with POSIX:

                                    -x SUN_MAKE_COMPAT_MODE=POSIX



                           2.     Compatibility with SUN make:

                                    -x SUN_MAKE_COMPAT_MODE=SUN



                           3.     Compatibility  with GNU make (partially sup‐
                                  ported):

                                    -x SUN_MAKE_COMPAT_MODE=GNU



                           4.     Compatibility with /usr/lib/svr4.make:

                                    -x SUN_MAKE_COMPAT_MODE=SVR4





OPERANDS
       The following operands are supported:

       target         Target names, as defined in Usage.


       macro=value    Macro definition. This definition overrides any  regular
                      definition  for  the specified macro within the makefile
                      itself, or in the environment. However, this  definition
                      can  still  be  overridden  by conditional macro assign‐
                      ments.


USAGE
       The usage of make is described below:

   Reading Makefiles and the Environment
       When make first starts, it reads the MAKEFLAGS environment variable  to
       obtain any of the following options specified present in its value: -d,
       -D, -e, -i, -k, -n, -p, -q, -r, -s, -S, or -t. Due to  the  implementa‐
       tion  of POSIX.2 (see POSIX.2(7), the MAKEFLAGS values contains a lead‐
       ing − character. The make utility then reads the command line for addi‐
       tional options, which also take effect.


       Next,  make  reads in a default makefile that typically contains prede‐
       fined macro definitions, target entries for implicit rules,  and  addi‐
       tional  rules,  such as the rule for retrieving SCCS files. If present,
       make uses the file make.rules in the current  directory;  otherwise  it
       reads the file /usr/share/lib/make/make.rules, which contains the stan‐
       dard definitions and rules. Use the directive:

         include /usr/share/lib/make/make.rules



       in your local make.rules file to include them.


       Next, make imports variables from the environment (unless the -e option
       is in effect), and treats them as defined macros. Because make uses the
       most recent definition it encounters, a macro definition in  the  make‐
       file  normally overrides an environment variable of the same name. When
       -e is in effect, however, environment variables are read in  after  all
       makefiles  have been read. In that case, the environment variables take
       precedence over definitions in the makefile.


       Next, make reads any makefiles you specify with -f, or one of  makefile
       or  Makefile  as  described above and then the state file, in the local
       directory if it exists. If the  makefile  contains  a  .KEEP_STATE_FILE
       target,  then it reads the state file that follows the target. Refer to
       special target .KEEP_STATE_FILE for details.


       Next (after reading the environment if -e is in effect), make reads  in
       any  macro  definitions supplied as command line arguments. These over‐
       ride macro definitions in the makefile and the  environment  both,  but
       only for the make command itself.


       make  exports  environment  variables,  using the most recently defined
       value. Macro definitions supplied on the command line are not  normally
       exported, unless the macro is also an environment variable.


       make  does not export macros defined in the makefile. If an environment
       variable is set, and a macro with the same name is defined on the  com‐
       mand  line,  make  exports  its  value  as defined on the command line.
       Unless -e is in effect, macro  definitions  within  the  makefile  take
       precedence over those imported from the environment.


       The  macros  MAKEFLAGS,  MAKE,  SHELL,  HOST_ARCH,  HOST_MACH, and TAR‐
       GET_MACH are  special  cases.  See  Special-Purpose  Macros  below  for
       details.

   Makefile Target Entries
       A target entry has the following format:

          target [:|::] [dependency] ... [; command] ... [command] ...



       The first line contains the name of a target, or a space-separated list
       of target names, terminated with a colon or double colon. If a list  of
       targets  is given, this is equivalent to having a separate entry of the
       same form for each target. The colon(s) can be  followed  by  a  depen‐
       dency,  or a dependency list. make checks this list before building the
       target. The dependency list can be terminated  with  a  semicolon  (;),
       which  in turn can be followed by a single Bourne shell command. Subse‐
       quent lines in the target entry begin with a  TAB  and  contain  Bourne
       shell  commands. These commands comprise the rule for building the tar‐
       get.


       Shell commands can be continued across input lines by escaping the NEW‐
       LINE  with  a backslash (\). The continuing line must also start with a
       TAB.


       To rebuild a target, make expands macros, strips off initial TAB  char‐
       acters  and  either  executes  the  command directly (if it contains no
       shell metacharacters), or passes each command line to  a  Bourne  shell
       for execution.


       The  first  non-empty  line  that does not begin with a TAB or # begins
       another target or macro definition.

   Special Characters
       Special characters are defined below.

   Global
       #                   Start a comment. The comment ends at the next  NEW‐
                           LINE.  If  the # follows the TAB in a command line,
                           that line is passed to the shell (which also treats
                           # as the start of a comment).


       include filename    If the word include appears as the first seven let‐
                           ters of a line and is followed by a SPACE  or  TAB,
                           the  string  that follows is taken as a filename to
                           interpolate at that line.

                           include files can be nested to a depth of  no  more
                           than about 16. If filename is a macro reference, it
                           is expanded. If filename is  surrounded  by  double
                           quotes,  make searches for a filename with relation
                           to current makefile path. If not, make is  supposed
                           to  find  it  with  relation to path where make was
                           launched.


   Targets and Dependencies
       :

           Target list terminator. Words following the colon are added to  the
           dependency  list for the target or targets. If a target is named in
           more than one colon-terminated target entry, the  dependencies  for
           all its entries are added to form that target's complete dependency
           list.


       ::

           Target terminator for alternate dependencies. When used in place of
           a : the double-colon allows a target to be checked and updated with
           respect to alternate dependency lists. When the target  is  out-of-
           date with respect to dependencies listed in the first alternate, it
           is built according to the rule for  that  entry.  When  out-of-date
           with  respect  to  dependencies  in  another alternate, it is built
           according the rule in that other entry. Implicit rules do not apply
           to  double-colon targets; you must supply a rule for each entry. If
           no dependencies are specified, the rule is always performed.


       target [+ target...] :

           Target group. The rule in the target entry builds all the indicated
           targets  as  a  group.  It is normally performed only once per make
           run, but is checked for command dependencies every time a target in
           the group is encountered in the dependency scan.


       %

           Pattern  matching  wild  card  metacharacter. Like the * shell wild
           card, % matches any string of zero or more characters in  a  target
           name  or  dependency,  in the target portion of a conditional macro
           definition, or within a pattern replacement macro reference. Notice
           that  only  one  % can appear in a target, dependency-name, or pat‐
           tern-replacement macro reference.


       ./pathname

           make ignores the leading ./  characters  from  targets  with  names
           given as pathnames relative to "dot," the working directory.


   Macros
       =        Macro  definition.  The  word to the left of this character is
                the macro name; words to the right comprise its value. Leading
                and  trailing  white  space  characters  are stripped from the
                value. A word break following the = is implied.


       $        Macro reference. The following character, or the parenthesized
                or bracketed string, is interpreted as a macro reference: make
                expands the reference (including the $) by replacing  it  with
                the macro's value.


       ( )      Macro-reference  name delimiters. A parenthesized or bracketed
       { }      word appended to a $ is taken as the name of the  macro  being
                referred  to. Without the delimiters, make recognizes only the
                first character as the macro name.



       $$       A reference to the dollar-sign macro, the value  of  which  is
                the  character  $. Used to pass variable expressions beginning
                with $ to the shell, to refer to environment  variables  which
                are  expanded  by the shell, or to delay processing of dynamic
                macros within the dependency list of a target, until that tar‐
                get is actually processed.


       \$       Escaped dollar-sign character. Interpreted as a literal dollar
                sign within a rule.


       +=       When used in place of =, appends a string to a  macro  defini‐
                tion (must be surrounded by white space, unlike =).


       :=       Conditional  macro assignment. When preceded by a list of tar‐
                gets with explicit target entries, the macro  definition  that
                follows  takes  effect when processing only those targets, and
                their dependencies.


       :sh =    Define the value of a macro to be the output of a command (see
                Command Substitutions below).


       :sh      In a macro reference, execute the command stored in the macro,
                and replace the reference with the output of that command (see
                Command Substitutions below).


   Rules
       +       make  always executes the commands preceded by a "+", even when
               -n is specified.


       −       make ignores any nonzero error code returned by a command  line
               for which the first non-TAB character is a −. This character is
               not passed to the shell as part of the command line. make  nor‐
               mally  terminates when a command returns nonzero status, unless
               the -i or -k options, or the .IGNORE:  special-function  target
               is in effect.


       @       If  the first non-TAB character is a @, make does not print the
               command line before executing it. This character is not  passed
               to the shell.


       ?       Escape command-dependency checking. Command lines starting with
               this character are not subject to command dependency checking.


       !       Force command-dependency checking. Command-dependency  checking
               is  applied  to  command  lines for which it would otherwise be
               suppressed. This checking is normally suppressed for lines that
               contain references to the ? dynamic macro (for example, $?).

               When  any  combination  of +, −, @, ?, or ! appear as the first
               characters after the TAB, all that are present apply. None  are
               passed to the shell.


   Special-Function Targets
       When  incorporated  in  a  makefile, the following target names perform
       special-functions:

       .DEFAULT:            If it has an entry in the makefile, the  rule  for
                            this target is used to process a target when there
                            is no other entry for it, no rule for building it,
                            and  no SCCS history file from which to retrieve a
                            current version. make ignores any dependencies for
                            this target.


       .DONE:               If  defined  in  the makefile, make processes this
                            target and its dependencies after all  other  tar‐
                            gets are built. This target is also performed when
                            make halts with an error, unless the .FAILED  tar‐
                            get is defined.


       .FAILED:             This  target, along with its dependencies, is per‐
                            formed instead of .DONE when defined in the  make‐
                            file and make halts with an error.


       .GET_POSIX:          This  target  contains the rule for retrieving the
                            current version of an SCCS file from  its  history
                            file  in  the current working directory. make uses
                            this rule when it is running in POSIX mode.


       .IGNORE:             Ignore errors. When this  target  appears  in  the
                            makefile,   make   ignores  non-zero  error  codes
                            returned from commands. When used in  POSIX  mode,
                            .IGNORE  could  be  followed by target names only,
                            for which the errors is ignored.


       .INIT:               If defined in the makefile, this  target  and  its
                            dependencies  are  built  before any other targets
                            are processed.


       .KEEP_STATE:         If this target is  in  effect,  make  updates  the
                            state file, .make.state, in the current directory.
                            This target also activates  command  dependencies,
                            and   hidden  dependency  checks.  If  either  the
                            .KEEP_STATE: target appears in  the  makefile,  or
                            the environment variable KEEP_STATE is set (setenv
                            KEEP_STATE), make rebuilds everything in order  to
                            collect  dependency  information,  even if all the
                            targets were up to date due to previous make runs.
                            See  also  the Environment Variables section. This
                            target has no effect if used in POSIX mode.


       .KEEP_STATE_FILE:    This target has no effect if used in  POSIX  mode.
                            This  target implies .KEEP_STATE. If the target is
                            followed by a filename, make uses it as the  state
                            file.  If  the  target  is followed by a directory
                            name, make looks for a .make.state  file  in  that
                            directory.  If  the  target is not followed by any
                            name, make looks for .make.state file in the  cur‐
                            rent working directory.


       .MAKE_VERSION:       A target-entry of the form:


                              .MAKE_VERSION: VERSION−number

                            enables  version  checking. If the version of make
                            differs from the version  indicated  by  a  string
                            like VERSION-1.0, make issues a warning message.


       .NO_PARALLEL:        Currently,  this target has no effect, it is, how‐
                            ever, reserved for future use.


       .PARALLEL:           Currently of no effect, but  reserved  for  future
                            use.


       .POSIX:              This target enables POSIX mode.


       .PRECIOUS:           List  of files not to delete. make does not remove
                            any of the files listed as dependencies  for  this
                            target when interrupted. make normally removes the
                            current target when it receives an interrupt. When
                            used  in POSIX mode, if the target is not followed
                            by a list of files, all the file are assumed  pre‐
                            cious.


       .SCCS_GET:           This  target  contains the rule for retrieving the
                            current version of an SCCS file from  its  history
                            file.  To  suppress  automatic  retrieval,  add an
                            entry for this target with an empty rule  to  your
                            makefile.


       .SCCS_GET_POSIX:     This  target  contains the rule for retrieving the
                            current version of an SCCS file from  its  history
                            file.  make  uses  this rule when it is running in
                            POSIX mode.


       .SILENT:             Run silently. When  this  target  appears  in  the
                            makefile,  make does not echo commands before exe‐
                            cuting them. When used in POSIX mode, it could  be
                            followed  by target names, and only those are exe‐
                            cuted silently.


       .SUFFIXES:           The suffixes list  for  selecting  implicit  rules
                            (see The Suffixes List).


       .WAIT:               Currently  of  no  effect, but reserved for future
                            use.


   Clearing Special Targets
       In this version of make, you can clear the definition of the  following
       special  targets by supplying entries for them with no dependencies and
       no rule:


       .DEFAULT, .SCCS_GET, and .SUFFIXES

   Command Dependencies
       When the .KEEP_STATE: target is effective, make checks the command  for
       building  a  target  against the state file. If the command has changed
       since the last make run, make rebuilds the target.

   Hidden Dependencies
       When the .KEEP_STATE: target is  effective,  make  reads  reports  from
       cpp(1) and other compilation processors for any "hidden" files, such as
       #include files. If the target is out of date with  respect  to  any  of
       these files, make rebuilds it.

   Macros
       Entries of the form

         macro=value



       define  macros.  macro  is the name of the macro, and value, which con‐
       sists of all characters up to a comment character or unescaped NEWLINE,
       is  the  value.  make  strips  both leading and trailing white space in
       accepting the value.


       Subsequent references to the macro, of the forms:  $(name)  or  ${name}
       are  replaced by value. The parentheses or brackets can be omitted in a
       reference to a macro with a single-character name.


       Macro references can contain references to other macros, in which  case
       nested references are expanded first.

   Suffix Replacement Macro References
       Substitutions within macros can be made as follows:

          $(name:string1=string2)



       where string1 is either a suffix, or a word to be replaced in the macro
       definition, and string2 is the replacement suffix or word. Words  in  a
       macro  value  are  separated by SPACE, TAB, and escaped NEWLINE charac‐
       ters.

   Pattern Replacement Macro References
       Pattern matching replacements can also be applied  to  macros,  with  a
       reference of the form:

         $(name: op%os= np%ns)



       where op is the existing (old) prefix and os is the existing (old) suf‐
       fix, np and ns are the new prefix and new suffix, respectively, and the
       pattern  matched by % (a string of zero or more characters), is carried
       forward from the value being replaced. For example:

         PROGRAM=fabricate
         DEBUG= $(PROGRAM:%=tmp/%−g)



       sets the value of DEBUG to tmp/fabricate−g.


       Notice that pattern replacement macro references cannot be used in  the
       dependency  list  of  a pattern matching rule; the % characters are not
       evaluated independently. Also,  any  number  of  %  metacharacters  can
       appear after the equal-sign.

   Appending to a Macro
       Words can be appended to macro values as follows:

         macro += word ...


   Special-Purpose Macros
       When  the  MAKEFLAGS variable is present in the environment, make takes
       options from it, in combination with options  entered  on  the  command
       line.  make  retains  this  combined  value as the MAKEFLAGS macro, and
       exports it automatically to each command or shell it invokes.


       Notice that flags passed by way of MAKEFLAGS are  only  displayed  when
       the -d, or -dd options are in effect.


       The  MAKE  macro  is  another  special  case.  It has the value make by
       default, and temporarily overrides the -n option for any line in  which
       it is referred to. This allows nested invocations of make written as:

         $(MAKE) ...



       to  run  recursively,  with  the -n flag in effect for all commands but
       make. This lets you use make  -n to test an entire hierarchy  of  make‐
       files.


       For  compatibility with the 4.2 BSD  make, the MFLAGS macro is set from
       the MAKEFLAGS variable by prepending a -. MFLAGS is not exported  auto‐
       matically.


       The  SHELL macro, when set to a single-word value such as /usr/bin/csh,
       indicates the name of  an  alternate  shell  to  use.  The  default  is
       /bin/sh.  Notice  that  make  executes  commands  that contain no shell
       metacharacters itself. Built-in commands, such as dirs in the C  shell,
       are  not  recognized  unless  the command line includes a metacharacter
       (for instance, a semicolon). This macro is neither imported  from,  nor
       exported  to  the  environment,  regardless of -e. To be sure it is set
       properly, you  must  define  this  macro  within  every  makefile  that
       requires it.


       The syntax of the VPATH macro is:

              VPATH = [ pathname [ : pathname ] ... ]



       VPATH  specifies  a  list of directories to search for the files, which
       are targets or dependencies, when make is executed. VPATH is also  used
       in  order  to  search for the include files mentioned in the particular
       makefile.


       When processing a target or a dependency or an include directive,  make
       checks  the  existence  of  the  file with the same name in the current
       directory. If the file is found to be missing, make searches  for  this
       file in the list of directories presented in VPATH (like the PATH vari‐
       able in the shell). Unlike the PATH variable, VPATH is used in order to
       search  for  the  files  with relative pathnames. When make attempts to
       apply implicit rules to the target, it also searches for the dependency
       files using VPATH.


       When the file is found using VPATH, internal macros $@, $<, $?, $*, and
       their alternative forms (with D or F appended) are  set  in  accordance
       with  the  name  derived  from  VPATH. For instance, if the target sub‐
       dir/foo.o is found in the directory  /aaa/bbb  using  VPATH,  then  the
       value  of  the  internal  macro  $@  for  this  target is /aaa/bbb/sub‐
       dir/foo.o.


       If a target or a dependency file is found using VPATH, then any  occur‐
       rences  of  the  word that is the same as the target name in the subse‐
       quent rules are replaced with the actual name  of  the  target  derived
       from VPATH.


       For example:

         VPATH=./subdir
         file.o : file.c
                  cc -c file.c -o file.o



       If file.c is found in ./subdir, then the command

         cc -c ./subdir/file.c -o file.o



       are executed.


       The following macros are provided for use with cross-compilation:

       HOST_ARCH      The  processor type of the host system. By default, this
                      is the output of the mach(1) command, prepended with  -.
                      Under  normal  circumstances, this value should never be
                      altered by the user.


       HOST_MACH      The machine architecture of the host system. By default,
                      this  is  the  output  of the arch(1) command, prepended
                      with −. Under normal circumstances,  this  value  should
                      never be altered by the user.


       TARGET_ARCH    The processor type of the target system. By default, the
                      output of mach, prepended with −.


   Dynamic Macros
       There are several dynamically maintained  macros  that  are  useful  as
       abbreviations  within  rules. They are shown here as references; if you
       were to define them, make would simply override the definition.

       $*    The basename of the current target, derived as  if  selected  for
             use with an implicit rule.


       $<    The  name  of  a  dependency file, derived as if selected for use
             with an implicit rule.


       $@    The name of the current target. This is the  only  dynamic  macro
             whose  value  is  strictly  determined  when used in a dependency
             list. (In which case it takes the form $$@.)


       $?    The list of dependencies that are newer than the target. Command-
             dependency  checking  is  automatically suppressed for lines that
             contain this macro, just as if the command had been prefixed with
             a  ?.  See  the  description of ?, under Special Character  Rules
             above. You can force this check with the ! command-line prefix.


       $%    The name of the library  member  being  processed.  (See  Library
             Maintenance below.)



       To  refer to the $@ dynamic macro within a dependency list, precede the
       reference with an additional $ character (as  in,  $$@).  Because  make
       assigns $< and $* as it would for implicit rules (according to the suf‐
       fixes list and the directory contents), they  can  be  unreliable  when
       used within explicit target entries.


       These  macros  can be modified to apply either to the filename part, or
       the directory part of the strings they stand for, by  adding  an  upper
       case  F  or D, respectively (and enclosing the resulting name in paren‐
       theses or braces). Thus, $(@D) refers to  the  directory  part  of  the
       string  $@;  if there is no directory part, . is assigned. $(@F) refers
       to the filename part.

   Conditional Macro Definitions
       A macro definition of the form:

         target-list := macro = value



       indicates that when processing any of  the  targets  listed  and  their
       dependencies,  macro is to be set to the value supplied. Notice that if
       a conditional macro is referred to in a dependency list, the $ must  be
       delayed (use $$ instead). Also, target-list can contain a % pattern, in
       which case the macro is conditionally defined for all  targets  encoun‐
       tered  that  match  the pattern. A pattern replacement reference can be
       used within the value.


       You can temporarily append to a macros value with a conditional defini‐
       tion of the form:

         target-list := macro += value


   Predefined Macros
       make  supplies the macros shown in the table that follows for compilers
       and their options, host architectures, and other commands. Unless these
       macros  are  read  in  as  environment  variables, their values are not
       exported by make. If you run make with any of these set in the environ‐
       ment,  it  is a good idea to add commentary to the makefile to indicate
       what value each is expected to take. If -r is in effect, make does  not
       read       the       default       makefile       (./make.rules      or
       /usr/share/lib/make/make.rules) in which these  macro  definitions  are
       supplied.


       tab()  box;  cw(1i)  cw(1i)  |cw(1.17i)  |cw(3.33i)  lw(1i)  |lw(1.17i)
       |lw(3.33i)


       Table of  Predefined  Macros  _  UseMacroDefault  Value  _  LibraryARar
       ArchivesARFLAGSrv _

       AssemblerASas  CommandsASFLAGS COMPILE.s$(AS) $(ASFLAGS) COMPILE.S$(CC)
       $(ASFLAGS) $(CPPFLAGS)  -c _

       CCCcc   CompilerCFLAGS   CommandsCPPFLAGS   COMPILE.c$(CC)    $(CFLAGS)
       $(CPPFLAGS)  -c LINK.c$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) _

       C++CCCCC    CompilerCCFLAGSCFLAGS   CommandsCPPFLAGS   COMPILE.cc$(CCC)
       $(CCFLAGS)  $(CPPFLAGS)   -c   LINK.cc$(CCC)   $(CCFLAGS)   $(CPPFLAGS)
       $(LDFLAGS)  COMPILE.C$(CCC)  $(CCFLAGS)  $(CPPFLAGS)   -c  LINK.C$(CCC)
       $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS) _

       FORTRAN 77FCf77  CompilerFFLAGS  CommandsCOMPILE.f$(FC)  $(FFLAGS)   -c
       LINK.f$(FC)  $(FFLAGS)  $(LDFLAGS) COMPILE.F$(FC) $(FFLAGS) $(CPPFLAGS)
       -c LINK.F$(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) _

       FORTRAN 90FCf90 CompilerF90FLAGS CommandsCOMPILE.f90$(F90C) $(F90FLAGS)
       -c    LINK.f90$(F90C)    $(F90FLAGS)    $(LDFLAGS)   COMPILE.ftn$(F90C)
       $(F90FLAGS) $(CPPFLAGS)  -c LINK.ftnT{ $(F90C) $(F90FLAGS)  $(CPPFLAGS)
       $(LDFLAGS) T} _

       Link EditorLDld CommandLDFLAGS _

       lexLEXlex CommandLFLAGS LEX.l$(LEX) $(LFLAGS)  -t _

       lintLINTlint CommandLINTFLAGS LINT.c$(LINT) $(LINTFLAGS) $(CPPFLAGS) _

       Modula  2M2Cm2c  CommandsM2FLAGS  MODFLAGS  DEFFLAGS  COMPILE.def$(M2C)
       $(M2FLAGS) $(DEFFLAGS) COMPILE.mod$(M2C) $(M2FLAGS) $(MODFLAGS) _

       PascalPCpc CompilerPFLAGS CommandsCOMPILE.p$(PC) $(PFLAGS)  $(CPPFLAGS)
       -c LINK.p$(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) _

       RatforRFLAGS CompilationCOMPILE.r$(FC) $(FFLAGS) $(RFLAGS)  -c Command‐
       sLINK.r$(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) _

       rm CommandRMrm  -f _

       sccsSCCSFLAGS CommandSCCSGETFLAGS-s _

       yaccYACCyacc CommandYFLAGS YACC.y$(YACC) $(YFLAGS) _

       Suffixes ListSUFFIXEST{ .o .c .c~ .cc .cc~ .y .y~ .l  .l~  .s  .s~  .sh
       .sh~  .S .S~ .ln .h .h~ .f .f~ .F .F~ .mod .mod~ .sym .def .def~ .p .p~
       .r .r~ .cps .cps~ .C .C~ .Y .Y~ .L .L .f90 .f90~ .ftn .ftn~ T}


   Implicit Rules
       When a target has no entry in the makefile, make attempts to  determine
       its  class (if any) and apply the rule for that class. An implicit rule
       describes how to build any target of a given class, from an  associated
       dependency  file.  The  class of a target can be determined either by a
       pattern, or by a suffix; the corresponding dependency  file  (with  the
       same  basename) from which such a target might be built. In addition to
       a predefined set of implicit rules, make allows you to define your own,
       either by pattern, or by suffix.

   Pattern Matching Rules
       A target entry of the form:

         tp%ts:dp%ds
              rule



       is  a  pattern  matching  rule, in which tp is a target prefix, ts is a
       target suffix, dp is a dependency prefix, and ds is a dependency suffix
       (any of which can be null). The % stands for a basename of zero or more
       characters that is matched in the target, and is used to construct  the
       name of a dependency. When make encounters a match in its search for an
       implicit rule, it uses the rule in that target entry to build the  tar‐
       get from the dependency file. Pattern-matching implicit rules typically
       make use of the $@ and $< dynamic macros as placeholders for the target
       and  dependency  names.  Other,  regular  dependencies can occur in the
       dependency list; however, none of the regular dependencies can  contain
       %. An entry of the form:

         tp%ts:[dependency ...] dp%ds[dependency ...]
              rule



       is a valid pattern matching rule.

   Suffix Rules
       When  no  pattern matching rule applies, make checks the target name to
       see if it ends with a suffix in the known suffixes list.  If  so,  make
       checks  for  any  suffix  rules, as well as a dependency file with same
       root and another recognized suffix, from which to build it.


       The target entry for a suffix rule takes the form:

         DsTs: rule



       where Ts is the suffix of the target, Ds is the suffix  of  the  depen‐
       dency  file,  and  rule is the rule for building a target in the class.
       Both Ds and Ts must appear in the suffixes list.  (A  suffix  need  not
       begin with a . to be recognized.)


       A suffix rule with only one suffix describes how to build a target hav‐
       ing a null (or no) suffix from a dependency  file  with  the  indicated
       suffix.  For instance, the .c rule could be used to build an executable
       program named file from a C source file named file.c. If a target  with
       a  null  suffix has an explicit dependency, make omits the search for a
       suffix rule.


       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules for Assembly  Files  T}  _
       Implicit Rule NameCommand Line _ .s.o$(COMPILE.s)  -o  $@ $< _

       .s.a$(COMPILE.s)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .s~.o$(GET) $(GFLAGS)  -p  $< > $*.s $(COMPILE.s)  -o  $@ $*.s _

       .S.o$(COMPILE.S)  -o  $@ $< _

       .S.a$(COMPILE.S)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .S~.o$(GET) $(GFLAGS)  -p  $< > $*.S $(COMPILE.S)  -o  $@ $*.S _

       .S~.a$(GET)  $(GFLAGS)   -p   $< > $*.S $(COMPILE.S)  -o  $% $*.S $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules for C Files T} _  Implicit
       Rule NameCommand Line _ .c$(LINK.c)  -o  $@ $< $(LDLIBS) _

       .c.ln$(LINT.c) $(OUTPUT_OPTION)  -i  $< _

       .c.o$(COMPILE.c) $(OUTPUT_OPTION) $< _

       .c.a$(COMPILE.c)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .c~$(GET)  $(GFLAGS)   -p  $< > $*.c $(CC) $(CFLAGS) $(LDFLAGS)  -o  $@
       $*.c _

       .c~.o$(GET) $(GFLAGS)  -p  $< > $*.c $(CC) $(CFLAGS)  -c  $*.c _

       .c~.ln$(GET) $(GFLAGS)  -p  $< > $*.c  $(LINT.c)  $(OUTPUT_OPTION)   -c
       $*.c _

       .c~.a$(GET)  $(GFLAGS)   -p   $< > $*.c $(COMPILE.c)  -o  $% $*.c $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard  Implicit  (Suffix)  Rules  for  C++  Files  T}  _
       Implicit Rule NameCommand Line _ .cc$(LINK.cc)  -o  $@ $< $(LDLIBS) _

       .cc.o$(COMPILE.cc) $(OUTPUT_OPTION) $< _

       .cc.a$(COMPILE.cc)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .cc~$(GET) $(GFLAGS)  -p  $< > $*.cc $(LINK.cc)  -o  $@ $*.cc $(LDLIBS)
       _

       .cc.o$(COMPILE.cc) $(OUTPUT_OPTION) $< _

       .cc~.o$(GET) $(GFLAGS)  -p  $< > $*.cc  $(COMPILE.cc)  $(OUTPUT_OPTION)
       $*.cc _

       .cc.a$(COMPILE.cc)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .cc~.a$(GET)  $(GFLAGS)   -p   $<  >  $*.cc $(COMPILE.cc)  -o  $% $*.cc
       $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .C$(LINK.C)  -o  $@ $< $(LDLIBS) _

       .C~$(GET) $(GFLAGS)  -p  $< > $*.C $(LINK.C)  -o  $@ $*.C $(LDLIBS) _

       .C.o$(COMPILE.C) $(OUTPUT_OPTION) $< _

       .C~.o$(GET) $(GFLAGS)  -p  $< > $*.C $(COMPILE.C) $(OUTPUT_OPTION) $*.C
       _

       .C.a$(COMPILE.C)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .C~.a$(GET)  $(GFLAGS)   -p   $< > $*.C $(COMPILE.C)  -o  $% $*.C $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules for FORTRAN 77 Files T}  _
       Implicit Rule NameCommand Line _ .f$(LINK.f)  -o  $@ $< $(LDLIBS) _

       .f.o$(COMPILE.f) $(OUTPUT_OPTION) $< _

       .f.a$(COMPILE.f)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .f$(LINK.f)  -o  $@ $< $(LDLIBS) _

       .f~$(GET)  $(GFLAGS)   -p  $< > $*.f $(FC) $(FFLAGS) $(LDFLAGS)  -o  $@
       $*.f _

       .f~.o$(GET) $(GFLAGS)  -p  $< > $*.f $(FC) $(FFLAGS)  -c  $*.f _

       .f~.a$(GET) $(GFLAGS)  -p  $< > $*.f $(COMPILE.f)  -o   $%  $*.f  $(AR)
       $(ARFLAGS) $@ $% $(RM) $% _

       .F$(LINK.F)  -o  $@ $< $(LDLIBS) _

       .F.o$(COMPILE.F) $(OUTPUT_OPTION) $< _

       .F.a$(COMPILE.F)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .F~$(GET)  $(GFLAGS)   -p  $< > $*.F $(FC) $(FFLAGS) $(LDFLAGS)  -o  $@
       $*.F _

       .F~.o$(GET) $(GFLAGS)  -p  $< > $*.F $(FC) $(FFLAGS)  -c  $*.F _

       .F~.a$(GET) $(GFLAGS)  -p  $< > $*.F $(COMPILE.F)  -o   $%  $*.F  $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{  Table of Standard Implicit (Suffix) Rules for FORTRAN 90 Files T} _
       Implicit Rule NameCommand Line _ .f90$(LINK.f90)  -o  $@ $< $(LDLIBS) _

       .f90~$(GET) $(GFLAGS)  -p  $<  >  $*.f90  $(LINK.f90)   -o   $@  $*.f90
       $(LDLIBS) _

       .f90.o$(COMPILE.f90) $(OUTPUT_OPTION) $< _

       .f90~.o$(GET)   $(GFLAGS)    -p   $<  >  $*.f90  $(COMPILE.f90)  $(OUT‐
       PUT_OPTION) $*.f90 _

       .f90.a$(COMPILE.f90)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .f90~.a$(GET) $(GFLAGS)  -p  $< > $*.f90 $(COMPILE.f90)  -o  $%  $*.f90
       $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .ftn$(LINK.ftn)  -o  $@ $< $(LDLIBS) _

       .ftn~$(GET)  $(GFLAGS)   -p   $<  >  $*.ftn  $(LINK.ftn)  -o  $@ $*.ftn
       $(LDLIBS) _

       .ftn.o$(COMPILE.ftn) $(OUTPUT_OPTION) $< _

       .ftn~.o$(GET)  $(GFLAGS)   -p   $<  >  $*.ftn   $(COMPILE.ftn)   $(OUT‐
       PUT_OPTION) $*.ftn _

       .ftn.a$(COMPILE.ftn)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .ftn~.a$(GET)  $(GFLAGS)  -p  $< > $*.ftn $(COMPILE.ftn)  -o  $% $*.ftn
       $(AR) $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard  Implicit  (Suffix)  Rules  for  lex  Files  T}  _
       Implicit  Rule  NameCommand  Line  _  .l$(RM)  $*.c  $(LEX.l) $< > $*.c
       $(LINK.c)  -o  $@ $*.c $(LDLIBS) $(RM) $*.c _

       .l.c$(RM) $@ $(LEX.l) $< > $@ _

       .l.ln$(RM) $*.c $(LEX.l) $< > $*.c $(LINT.c)  -o  $@   -i   $*.c  $(RM)
       $*.c _

       .l.o$(RM)  $*.c $(LEX.l) $< > $*.c $(COMPILE.c)  -o  $@ $*.c $(RM) $*.c
       _

       .l~$(GET)  $(GFLAGS)   -p   $<  >  $*.l  $(LEX)  $(LFLAGS)  $*.l  $(CC)
       $(CFLAGS)  -c  lex.yy.c rm  -f  lex.yy.c mv lex.yy.c $@ _

       .l~.c$(GET)  $(GFLAGS)  -p  $< > $*.l $(LEX) $(LFLAGS) $*.l mv lex.yy.c
       $@ _

       .l~.ln$(GET) $(GFLAGS)  -p  $< > $*.l $(RM) $*.c $(LEX.l) $*.l  >  $*.c
       $(LINT.c)  -o  $@  -i  $*.c $(RM) $*.c _

       .l~.o$(GET)  $(GFLAGS)   -p   $<  >  $*.l  $(LEX)  $(LFLAGS) $*.l $(CC)
       $(CFLAGS)  -c  lex.yy.c rm  -f  lex.yy.c mv lex.yy.c $@



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules for Modula 2  Files  T}  _
       Implicit  Rule NameCommand Line _ .mod$(COMPILE.mod)  -o  $@  -e  $@ $<
       _

       .mod.o$(COMPILE.mod)  -o  $@ $< _

       .def.sym$(COMPILE.def)  -o  $@ $< _

       .def~.sym$(GET) $(GFLAGS)  -p  $< > $*.def $(COMPILE.def)  -o$@  $*.def
       _

       .mod~$(GET)  $(GFLAGS)   -p  $< > $*.mod $(COMPILE.mod)  -o  $@  -e  $@
       $*.mod _

       .mod~.o$(GET) $(GFLAGS)  -p  $< > $*.mod $(COMPILE.mod)  -o  $@  $*.mod
       _

       .mod~.a$(GET)  $(GFLAGS)  -p  $< > $*.mod $(COMPILE.mod)  -o  $% $*.mod
       $(AR) $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit  (Suffix)  Rules  for  NeWS  Files  T}  _
       Implicit  Rule  NameCommand  Line  _  .cps.hcps  $*.cps _ .cps~.h$(GET)
       $(GFLAGS)  -p  $< > $*.cps $(CPS) $(CPSFLAGS) $*.cps



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules  for  Pascal  Files  T}  _
       Implicit Rule NameCommand Line _ .p$(LINK.p)  -o  $@ $< $(LDLIBS) _

       .p.o$(COMPILE.p) $(OUTPUT_OPTION) $< _

       .p~$(GET) $(GFLAGS)  -p  $< > $*.p $(LINK.p)  -o  $@ $*.p $(LDLIBS) _

       .p~.o$(GET) $(GFLAGS)  -p  $< > $*.p $(COMPILE.p) $(OUTPUT_OPTION) $*.p
       _

       .p~.a$(GET) $(GFLAGS)  -p  $< > $*.p $(COMPILE.p)  -o   $%  $*.p  $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{  Table  of  Standard  Implicit  (Suffix) Rules for Ratfor Files T} _
       Implicit Rule NameCommand Line _ .r$(LINK.r)  -o  $@ $< $(LDLIBS) _

       .r.o$(COMPILE.r) $(OUTPUT_OPTION) $< _

       .r.a$(COMPILE.r)  -o  $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% _

       .r~$(GET) $(GFLAGS)  -p  $< > $*.r $(LINK.r)  -o  $@ $*.r $(LDLIBS) _

       .r~.o$(GET) $(GFLAGS)  -p  $< > $*.r $(COMPILE.r) $(OUTPUT_OPTION) $*.r
       _

       .r~.a$(GET)  $(GFLAGS)   -p   $< > $*.r $(COMPILE.r)  -o  $% $*.r $(AR)
       $(ARFLAGS) $@ $% $(RM) $%



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit  (Suffix)  Rules  for  SCCS  Files  T}  _
       Implicit  Rule  NameCommand  Line  _  .SCCS_GETT{ sccs $(SCCSFLAGS) get
       $(SCCSGETFLAGS) $@  -G$@ T}

       _

       .SCCS_GET_POSIXsccs $(SCCSFLAGS) get $(SCCSGETFLAGS) $@ _

       .GET_POSIX$(GET) $(GFLAGS) s.$@



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{ Table of Standard Implicit (Suffix) Rules for  Shell  Scripts  T}  _
       Implicit Rule NameCommand Line _ .shcat $< >$@ chmod +x $@ _

       .sh~$(GET) $(GFLAGS)  -p  $< > $*.sh cp $*.sh $@ chmod a+x $@



       tab() box; cw(1.57i) cw(1.57i) |cw(3.93i) lw(1.57i) |lw(3.93i)


       T{  Table  of  Standard  Implicit  (Suffix)  Rules  for yacc Files T} _
       Implicit Rule NameCommand Line  _  .y$(YACC.y)  $<  $(LINK.c)   -o   $@
       y.tab.c $(LDLIBS) $(RM) y.tab.c _

       .y.c$(YACC.y) $< mv y.tab.c $@ _

       .y.ln$(YACC.y) $< $(LINT.c)  -o  $@  -i  y.tab.c $(RM) y.tab.c _

       .y.o$(YACC.y) $< $(COMPILE.c)  -o  $@ y.tab.c $(RM) y.tab.c _

       .y~$(GET)  $(GFLAGS)  -p  $< > $*.y $(YACC) $(YFLAGS) $*.y $(COMPILE.c)
       -o  $@ y.tab.c $(RM) y.tab.c _

       .y~.c$(GET) $(GFLAGS)  -p  $< > $*.y $(YACC) $(YFLAGS) $*.y mv  y.tab.c
       $@ _

       .y~.ln$(GET)  $(GFLAGS)  -p  $< > $*.y $(YACC.y) $*.y $(LINT.c)  -o  $@
       -i  y.tab.c $(RM) y.tab.c _

       .y~.o$(GET) $(GFLAGS)  -p  $<  >  $*.y  $(YACC)  $(YFLAGS)  $*.y  $(CC)
       $(CFLAGS)  -c  y.tab.c rm  -f  y.tab.c mv y.tab.o $@



       make  reads  in  the  standard  set  of  implicit  rules  from the file
       /usr/share/lib/make/make.rules, unless -r is in effect, or there  is  a
       make.rules file in the local directory that does not include that file.

   The Suffixes List
       The  suffixes  list  is given as the list of dependencies for the .SUF‐
       FIXES: special-function target. The default list is  contained  in  the
       SUFFIXES macro (See Table of Predefined Macros for the standard list of
       suffixes). You can define additional .SUFFIXES:  targets;  a  .SUFFIXES
       target  with no dependencies clears the list of suffixes. Order is sig‐
       nificant within the list; make selects a rule that corresponds  to  the
       target's suffix and the first dependency-file suffix found in the list.
       To place suffixes at the head of the list, clear the list  and  replace
       it with the new suffixes, followed by the default list:

            .SUFFIXES:
            .SUFFIXES: suffixes $(SUFFIXES)



       A tilde (~) indicates that if a dependency file with the indicated suf‐
       fix (minus the ~) is under SCCS  its  most  recent  version  should  be
       retrieved, if necessary, before the target is processed.

   Library Maintenance
       A target name of the form:

            lib(member ...)



       refers  to  a member, or a space-separated list of members, in an ar(1)
       library.


       The dependency of the library member on the corresponding file must  be
       given  as  an  explicit entry in the makefile. This can be handled by a
       pattern matching rule of the form:

            lib(%.s): %.s



       where .s is the suffix of the member; this suffix is typically  .o  for
       object libraries.


       A target name of the form:

            lib((symbol))



       refers  to  the  member of a randomized object library that defines the
       entry point named symbol.

   Command Execution
       Command lines are executed one at a time, each by its  own  process  or
       shell.  Shell commands, notably cd, are ineffectual across an unescaped
       NEWLINE in the makefile. A line is printed (after macro expansion) just
       before  being  executed.  This  is suppressed if it starts with a @, if
       there is a .SILENT: entry in the makefile, or if make is run  with  the
       -s option. Although the -n option specifies printing without execution,
       lines containing the macro $(MAKE) are executed regardless,  and  lines
       containing  the  @ special character are printed. The -t (touch) option
       updates the modification date of a file without  executing  any  rules.
       This can be dangerous when sources are maintained by more than one per‐
       son.


       make invokes the shell with the  -e  (exit-on-errors)  argument.  Thus,
       with semicolon-separated command sequences, execution of the later com‐
       mands depends on the success of the former. This behavior can be  over‐
       ridden  by  starting  the  command line with a -, or by writing a shell
       script that returns a non-zero status only as it finds appropriate.

   Bourne Shell Constructs
       To use the Bourne shell if control structure for branching, use a  com‐
       mand line of the form:

         if expression ; \
         then command ; \
              ... ; \
         else command; \
              ... ; \
         fi



       Although  composed  of several input lines, the escaped NEWLINE charac‐
       ters insure that make treats them all as one (shell) command line.


       To use the Bourne shell for control structure for loops, use a  command
       line of the form:

         for var in list ; \
         do command; \
              ... ; \done



       To  refer to a shell variable, use a double-dollar-sign ($$). This pre‐
       vents expansion of the dollar-sign by make.

   Command Substitutions
       To incorporate the standard output of a shell command in a macro, use a
       definition of the form:

            MACRO:sh =command



       The  command is executed only once, standard error output is discarded,
       and NEWLINE characters are replaced with SPACEs. If the command  has  a
       non-zero exit status, make halts with an error.


       To  capture  the  output of a shell command in a macro reference, use a
       reference of the form:

         $(MACRO:sh)



       where MACRO is the name of a macro containing a valid Bourne shell com‐
       mand line. In this case, the command is executed whenever the reference
       is evaluated. As with shell command  substitutions,  the  reference  is
       replaced  with the standard output of the command. If the command has a
       non-zero exit status, make halts with an error.


       In contrast to commands in rules, the command is not subject for  macro
       substitution;  therefore, a dollar sign ($) need not be replaced with a
       double dollar sign ($$).

   Signals
       INT, SIGTERM, and QUIT signals received from the keyboard halt make and
       remove  the  target  file  being processed unless that target is in the
       dependency list for .PRECIOUS:.

   Compatibility with GNU make
       The compatibility mode with GNU  make  changes  Oracle  Solaris  make's
       behavior  with  respect  to the dynamic macro $<. By default the Oracle
       Solaris make treats this macro  as  the  name  of  a  dependency  file,
       derived as if selected for use with an implicit rule.


       GNU  make  treats this macro as the name of a dependency, even if it is
       not a file. If the -x SUN_MAKE_COMPAT_MODE=GNU option is passed to  the
       Oracle Solaris make, it behaves as GNU make in this particular case.

EXAMPLES
       Example 1 Defining dependencies



       This  makefile says that pgm depends on two files a.o and b.o, and that
       they in turn depend on their corresponding source files (a.c  and  b.c)
       along with a common file incl.h:




         pgm:  a.o  b.o
              $(LINK.c) -o $@a.o  b.o
         a.o:  incl.h  a.c
              cc -c a.c
         b.o:  incl.h  b.c
              cc -c b.c


       Example 2 Using implicit rules



       The  following  makefile uses implicit rules to express the same depen‐
       dencies:


         pgm:  a.o  b.o
              cc  a.o  b.o -o pgm
         a.o  b.o:  incl.h


ENVIRONMENT VARIABLES
       See environ(7) for descriptions of the following environment  variables
       that affect the execution of make: LANG, LC_ALL, LC_CTYPE, LC_MESSAGES,
       and NLSPATH.

       KEEP_STATE              This environment variable has the  same  effect
                               as the .KEEP_STATE: special-function target. It
                               enables command dependencies, hidden  dependen‐
                               cies and writing of the state file.


       USE_SVR4_MAKE           This environment variable causes make to invoke
                               the  generic   System   V   version   of   make
                               (/usr/lib/svr4.make). See sysV-make(1).


       MAKEFLAGS               This  variable  is  interpreted  as a character
                               string representing a series of option  charac‐
                               ters  to  be  used  as the default options. The
                               implementation accepts both  of  the  following
                               formats  (but  need not accept them when inter‐
                               mixed):


                                   1.     The characters  are  option  letters
                                          without the leading hyphens or blank
                                          character separation used on a  com‐
                                          mand line.


                                   2.     The  characters  are  formatted in a
                                          manner similar to a portion  of  the
                                          make  command line: options are pre‐
                                          ceded by hyphens  and  blank-charac‐
                                          ter-separated.  The macro=name macro
                                          definition  operands  can  also   be
                                          included. The difference between the
                                          contents of MAKEFLAGS and  the  com‐
                                          mand  line  is  that the contents of
                                          the variable is not subjected to the
                                          word   expansions   associated  with
                                          parsing the command line values. See
                                          wordexp(3C).

                                          When  the command-line options -f or
                                          -p  are  used,  they   take   effect
                                          regardless   of  whether  they  also
                                          appear in MAKEFLAGS. If they  other‐
                                          wise appear in MAKEFLAGS, the result
                                          is undefined.


                               The MAKEFLAGS variable  is  accessed  from  the
                               environment  before  the  makefile  is read. At
                               that time, all of the options  (except  -f  and
                               -p)   and   command-line   macros  not  already
                               included in MAKEFLAGS are added  to  the  MAKE‐
                               FLAGS macro. The MAKEFLAGS macro is passed into
                               the environment as an environment variable  for
                               all  child processes. If the MAKEFLAGS macro is
                               subsequently set by the makefile,  it  replaces
                               the  MAKEFLAGS  variable currently found in the
                               environment.


       PROJECTDIR              Provides a directory to be used to  search  for
                               SCCS  files not found in the current directory.
                               In all of the following cases, the  search  for
                               SCCS files is made in the directory SCCS in the
                               identified directory. If the value of  PROJECT‐
                               DIR begins with a slash, it shall be considered
                               an absolute pathname. Otherwise, the  value  of
                               PROJECTDIR  is  treated as a user name and that
                               user's initial working directory shall be exam‐
                               ined  for a subdirectory src or source. If such
                               a directory is found, it shall be used.  Other‐
                               wise, the value is used as a relative pathname.

                               If  PROJECTDIR  is not set or has a null value,
                               the search for SCCS files shall be made in  the
                               directory  SCCS  in  the current directory. The
                               setting of PROJECTDIR affects all files  listed
                               in  the  remainder  of this utility description
                               for files with a component named SCCS.


       SUN_MAKE_COMPAT_MODE    Causes make to change behavior according to the
                               specified compatibility mode. Examples:

                               SUN_MAKE_COMPAT_MODE="POSIX"

                                   Support  POSIX  makefiles and compatibility
                                   with /usr/xpg4/bin/make


                               SUN_MAKE_COMPAT_MODE="SUN"

                                   Support  Sun  makefiles  and  compatibility
                                   with Oracle Solaris /usr/bin/make


                               SUN_MAKE_COMPAT_MODE="GNU"

                                   Support GNU makefiles and GNU make behavior
                                   (partially supported)


                               SUN_MAKE_COMPAT_MODE="SVR4"

                                   Support SVR4  makefiles  and  compatibility
                                   with /usr/lib/svr4.make



EXIT STATUS
       When the -q option is specified, the make utility exits with one of the
       following values:

       0     Successful completion.


       1     The target was not up-to-date.


       >1    An error occurred.



       When the -q option is not specified, the make utility exits with one of
       the following values:

       0     Successful completion


       >0    An error occurred


FILES
       makefile
       Makefile

           current version(s) of make description file



       s.makefile
       s.Makefile

           SCCS  history files for the above makefile(s) in the current direc‐
           tory



       SCCS/s.makefile
       SCCS/s.Makefile

           SCCS history files for the above makefile(s)



       make.rules

           default file for user-defined targets, macros, and implicit rules


       /usr/share/lib/make/make.rules

           makefile for standard  implicit  rules  and  macros  (not  read  if
           make.rules is)


       .make.state

           state file in the local directory


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

   /usr/bin/make
       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Availabilitydeveloper/build/make


   /usr/xpg4/bin/make
       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE VALUE _ Availabilitydeveloper/xopen/xcu4 _ Interface Stability‐
       Committed _ StandardSee standards(7).


SEE ALSO
       ar(1), arch(1), cd(1), cpp(1),  lex(1),  mach(1),  sccs-get(1),  sh(1),
       sysV-make(1),     yacc(1),    wordexp(3C),    passwd(5),    POSIX.2(7),
       attributes(7), environ(7), standards(7)




DIAGNOSTICS
       Don't know how to make target target

           There is no makefile entry for target, and none of make's  implicit
           rules  apply (there is no dependency file with a suffix in the suf‐
           fixes list, or the target's suffix is not in the list).


       *** target removed.

           make was interrupted while building target. Rather than  leaving  a
           partially-completed  version  that  is newer than its dependencies,
           make removes the file named target.


       *** target not removed.

           make was interrupted while  building  target  and  target  was  not
           present in the directory.


       *** target could not be removed, reason

           make  was  interrupted while building target, which was not removed
           for the indicated reason.


       Read of include file file failed

           The makefile indicated in an include directive was  not  found,  or
           was inaccessible.


       Loop detected when expanding macro value macro'

           A reference to the macro being defined was found in the definition.


       Could not write state file file

           You  used the .KEEP_STATE: target, but do not have write permission
           on the state file.


       ***Error code n

           The previous shell command returned a nonzero error code.


       *** signal message

           The previous shell command was aborted due to a signal. If  -  core
           dumped appears after the message, a core file was created.


       Conditional macro conflict encountered

           Displayed  only  when  -d is in effect, this message indicates that
           two or more parallel targets currently being processed depend on  a
           target which is built differently for each by virtue of conditional
           macros. Since the target cannot simultaneously satisfy both  depen‐
           dency relationships, it is conflicted.


BUGS
       Some  commands  return nonzero status inappropriately; to overcome this
       difficulty, prefix the offending command line in the rule with a −.


       Filenames with the characters =, :, or @, do not work.


       You cannot build file.o from lib(file.o).


       Options supplied by MAKEFLAGS should be reported for nested  make  com‐
       mands.  Use  the  -d option to find out what options the nested command
       picks up from MAKEFLAGS.


       This version of make is incompatible in certain respects with  previous
       versions:

           o      The  -d  option  output is much briefer in this version. -dd
                  now produces the equivalent voluminous output.


           o      make attempts to derive values for the  dynamic  macros  $*,
                  $<,  and  $?, while processing explicit targets. It uses the
                  same method as for implicit rules; in some  cases  this  can
                  lead either to unexpected values, or to an empty value being
                  assigned. (Actually, this was true for earlier  versions  as
                  well, even though the documentation stated otherwise.)


           o      make no longer searches for SCCS history (s.) files.


           o      Suffix replacement in macro references are now applied after
                  the macro is expanded.



       There is no guarantee that makefiles created for this version  of  make
       works with earlier versions.


       If  there  is no make.rules file in the current directory, and the file
       /usr/share/lib/make/make.rules is missing, make stops before processing
       any  targets.  To  force make to run anyway, create an empty make.rules
       file in the current directory.


       Once a dependency is made, make assumes the dependency file is  present
       for  the remainder of the run. If a rule subsequently removes that file
       and future targets depend  on  its  existence,  unexpected  errors  can
       result.


       When  hidden  dependency  checking  is  in effect, the $? macro's value
       includes the names of hidden dependencies. This can  lead  to  improper
       filename arguments to commands when $? is used in a rule.


       Pattern  replacement  macro references cannot be used in the dependency
       list of a pattern matching rule.


       Unlike previous versions, this version of make strips a leading ./ from
       the value of the $@ dynamic macro.


       With  automatic  SCCS  retrieval, this version of make does not support
       tilde suffix rules.


       The only dynamic macro whose value is strictly determined when used  in
       a dependency list is $@ (takes the form $$@).


       make  invokes  the  shell with the -e argument. This cannot be inferred
       from the syntax of the rule alone.



Solaris 11.4                      9 Jul 2011                          make(1S)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3