Материал из

Перейти к: навигация, поиск

Шаблон:заголовок со строчной буквы

Не указан параметр (1)

MAKE(1) FreeBSD General Commands Manual MAKE(1)


[править] NAME

    make -- maintain program dependencies

[править] SYNOPSIS

    make [-ABPSXeiknpqrstv] [-C directory] [-D variable] [-d flags]
         [-E variable] [-f makefile] [-I directory] [-j max_jobs]
         [-m directory] [-V variable] [-x warning_options] [variable=value]
         [target ...]


    The make utility is a program designed to simplify the maintenance of
    other programs.  Its input is a list of specifications describing depen-
    dency relationships between the generation of files and programs.
    First of all, the initial list of specifications will be read from the
    system makefile,, unless inhibited with the -r option.  The stan-
    dard as shipped with FreeBSD also handles make.conf(5), the
    default path to which can be altered via the make variable __MAKE_CONF.
    Then the first of BSDmakefile, makefile, and Makefile that can be found
    in the current directory, object directory (see .OBJDIR), or search path
    (see the -I option) will be read for the main list of dependency specifi-
    cations.  A different makefile or list of them can be supplied via the -f
    option(s).  Finally, if the file .depend can be found in any of the
    aforesaid locations, it will also be read (see mkdep(1)).
    When make searches for a makefile, its name takes precedence over its
    location.  For instance, BSDmakefile in the object directory will be
    favored over Makefile in the current directory.
    The options are as follows:
    -A      Make archive errors non-fatal, causing make to just skip the
            remainder or all of the archive and continue after printing a
    -B      Try to be backwards compatible by executing a single shell per
            command and by executing the commands to make the sources of a
            dependency line in sequence.  This is turned on by default unless
            -j is used.
    -C directory
            Change to directory before reading the makefiles or doing any-
            thing else.  If multiple -C options are specified, each is inter-
            preted relative to the previous one: -C / -C etc is equivalent to
            -C /etc.
    -D variable
            Define variable to be 1, in the global context.
    -d flags
            Turn on debugging, and specify which portions of make are to
            print debugging information.  Argument flags is one or more of
            the following:
            A       Print all possible debugging information; equivalent to
                    specifying all of the debugging flags.
            a       Print debugging information about archive searching and
            c       Print debugging information about conditional evaluation.
            d       Print debugging information about directory searching and
            f       Print debugging information about the execution of for
            g1      Print the input graph before making anything.
            g2      Print the input graph after making everything, or before
                    exiting on error.
            j       Print debugging information about running multiple
            l       Print commands in Makefiles regardless of whether or not
                    they are prefixed by @ or other "quiet" flags.  Also
                    known as "loud" behavior.
            m       Print debugging information about making targets, includ-
                    ing modification dates.
            s       Print debugging information about suffix-transformation
            t       Print debugging information about target list mainte-
            v       Print debugging information about variable assignment.
    -E variable
            Specify a variable whose environment value (if any) will override
            macro assignments within makefiles.
    -e      Specify that environment values override macro assignments within
            makefiles for all variables.
    -f makefile
            Specify a makefile to read instead of the default one.  If
            makefile is not an absolute pathname, make will search for it as
            described above.  In case makefile is `-', standard input is
            read.  Multiple -f options can be supplied, and the makefiles
            will be read in that order.  Unlike the other command-line
            options, -f is neither stored in .MAKEFLAGS nor pushed down to
            sub-makes via MAKEFLAGS.  See below for more details on these
    -I directory
            Specify a directory in which to search for makefiles and included
            makefiles.  Multiple -I options can be specified to form a search
            path.  The system makefile directory (or directories, see the -m
            option) is automatically appended at the tail of this path.
    -i      Ignore non-zero exit of shell commands in the makefile.  Equiva-
            lent to specifying `-' before each command line in the makefile.
    -j max_jobs
            Specify the maximum number of jobs that make may have running at
            any one time.  Turns compatibility mode off, unless the -B flag
            is also specified.
    -k      Continue processing after errors are encountered, but only on
            those targets that do not depend on the target whose creation
            caused the error.
    -m directory
            Specify a directory in which to search for the system makefile
            and makefiles included via the <...> style.  Multiple -m options
            can be specified to form a search path.  This path will override
            the default system include path, /usr/share/mk.  The system
            include path will always be appended to the search path used for
            "..."-style inclusions and makefile searches (see the -I option).
            If a file or directory name in the -m argument (or the
            MAKESYSPATH environment variable) starts with the string ".../"
            then make will search for the specified file or directory named
            in the remaining part of the argument string.  The search starts
            with the current directory of the Makefile and then works upward
            towards the root of the filesystem.  If the search is successful,
            then the resulting directory replaces the ".../" specification in
            the -m argument.  If used, this feature allows make to easily
            search in the current source tree for customized files
            (e.g. by using ".../mk/" as an argument).  Note that a -C
            that are earlier on the command line affect where -m ".../"
    -n      Display the commands that would have been executed, but do not
            actually execute them.
    -P      Collate the output of a given job and display it only when the
            job finishes, instead of mixing the output of parallel jobs
            together.  This option has no effect unless -j is used too.
    -p      Only print the input graph, not executing any commands.  The out-
            put is the same as -d g1.  When combined with -f /dev/null, only
            the builtin rules of make are displayed.
    -Q      Be extra quiet.  For multi-job makes, this will cause file ban-
            ners not to be generated.
    -q      Do not execute any commands, but exit 0 if the specified targets
            are up-to-date and 1, otherwise.
    -r      Do not process the system makefile.
    -S      Stop processing when an error is encountered.  Default behaviour.
            This is needed to negate the -k option during recursive builds.
    -s      Do not echo any commands as they are executed.  Equivalent to
            specifying `@' before each command line in the makefile.
    -t      Rather than re-building a target as specified in the makefile,
            create it or update its modification time to make it appear up-
    -V variable
            Print make's idea of the value of variable, in the global con-
            text.  Do not build any targets.  Multiple instances of this
            option may be specified; the variables will be printed one per
            line, with a blank line for each null or undefined variable.
    -v      Be extra verbose.  Print any extra information.
    -X      When using the -V option to print the values of variables, do not
            recursively expand the values.
            Set the value of the variable variable to value.
    -x warning_options
            Specify extended warning options.  This option may be specified
            several times.  A warning_option can be prefixed with ``no in
            which case the warning is switched off.  The currently available
            options are:
                    Warn if anything except blanks and comments follows an
                    .endif or .else directive.
            See also the .WARN special target.
    There are seven different types of lines in a makefile: file dependency
    specifications, shell commands, variable assignments, include statements,
    conditional directives, for loops, and comments.
    In general, lines may be continued from one line to the next by ending
    them with a backslash (`\').  The trailing newline character and initial
    whitespace on the following line are compressed into a single space.


    Dependency lines consist of one or more targets, an operator, and zero or
    more sources.  This creates a relationship where the targets ``depend
    on the sources and are usually created from them.  The exact relationship
    between the target and the source is determined by the operator that sep-
    arates them.  The three operators are as follows:
    :     A target is considered out-of-date if its modification time is less
          than those of any of its sources.  Sources for a target accumulate
          over dependency lines when this operator is used.  The target is
          removed if make is interrupted.
    !     Targets are always re-created, but not until all sources have been
          examined and re-created as necessary.  Sources for a target accumu-
          late over dependency lines when this operator is used.  The target
          is removed if make is interrupted.
    ::    If no sources are specified, the target is always re-created.  Oth-
          erwise, a target is considered out-of-date if any of its sources
          has been modified more recently than the target.  Sources for a
          target do not accumulate over dependency lines when this operator
          is used.  The target will not be removed if make is interrupted.
    Targets and sources may contain the shell wildcard expressions `?', `*',
    `[]' and `{}'.  The expressions `?', `*' and `[]' may only be used as
    part of the final component of the target or source, and must be used to
    describe existing files.  The expression `{}' need not necessarily be
    used to describe existing files.  Expansion is in directory order, not
    alphabetically as done in the shell.


    Each target may have associated with it a series of shell commands, nor-
    mally used to create the target.  Each of the commands in this script
    must be preceded by a tab.  While any target may appear on a dependency
    line, only one of these dependencies may be followed by a creation
    script, unless the `::' operator is used.
    If the first characters of the command line are `@', `-', and/or `+', the
    command is treated specially.  A `@' causes the command not to be echoed
    before it is executed.  A `-' causes any non-zero exit status of the com-
    mand line to be ignored.  A `+' causes the command to be executed even if
    -n is specified on the command line.


    Variables in make are much like variables in the shell, and, by tradi-
    tion, consist of all upper-case letters.  The five operators that can be
    used to assign values to variables are as follows:
    =       Assign the value to the variable.  Any previous value is overrid-
    +=      Append the value to the current value of the variable.
    ?=      Assign the value to the variable if it is not already defined.
    :=      Assign with expansion, i.e., expand the value before assigning it
            to the variable.  Normally, expansion is not done until the vari-
            able is referenced.
    !=      Expand the value and pass it to the shell for execution and
            assign the result to the variable.  Any newlines in the result
            are replaced with spaces.
    Any whitespace before the assigned value is removed; if the value is
    being appended, a single space is inserted between the previous contents
    of the variable and the appended value.
    Variables are expanded by surrounding the variable name with either curly
    braces (`{}') or parentheses (`()') and preceding it with a dollar sign
    (`$').  If the variable name contains only a single letter, the surround-
    ing braces or parentheses are not required.  This shorter form is not
    Variable substitution occurs at two distinct times, depending on where
    the variable is being used.  Variables in dependency lines are expanded
    as the line is read.  Variables in shell commands are expanded when the
    shell command is executed.
    The four different classes of variables (in order of increasing prece-
    dence) are:
    Environment variables
            Variables defined as part of make's environment.
    Global variables
            Variables defined in the makefile or in included makefiles.
    Command line variables
            Variables defined as part of the command line and variables
            obtained from the MAKEFLAGS environment variable or the
            .MAKEFLAGS target.
    Local variables
            Variables that are defined specific to a certain target.
    If the name of an environment variable appears in a makefile on the left-
    hand side of an assignment, a global variable with the same name is cre-
    ated, and the latter shadows the former as per their relative prece-
    dences.  The environment is not changed in this case, and the change is
    not exported to programs executed by make.  However, a command-line vari-
    able actually replaces the environment variable of the same name if the
    latter exists, which is visible to child programs.
    There are seven local variables in make:
    .ALLSRC   The list of all sources for this target; also known as `>'.
    .ARCHIVE  The name of the archive file; also known as `!'.
    .IMPSRC   The name/path of the source from which the target is to be
              transformed (the ``implied source); also known as `<'.
    .MEMBER   The name of the archive member; also known as `%'.
    .OODATE   The list of sources for this target that were deemed out-of-
              date; also known as `?'.
    .PREFIX   The file prefix of the file, containing only the file portion,
              no suffix or preceding directory components; also known as `*'.
    .TARGET   The name of the target; also known as `@'.
    The shorter forms `@', `!', `<', `%', `?', `>', and `*' are permitted for
    backward compatibility and are not recommended.  The six variables `@F',
    `@D', `<F', `<D', `*F', and `*D' are permitted for compatibility with
    AT&T System V UNIX makefiles and are not recommended.
    Four of the local variables may be used in sources on dependency lines
    because they expand to the proper value for each target on the line.
    These variables are .TARGET, .PREFIX, .ARCHIVE, and .MEMBER.
    In addition, make sets or knows about the following internal variables or
    environment variables:
    $               A single dollar sign `$', i.e. `$$' expands to a single
                    dollar sign.
    MAKE            The name that make was executed with (argv[0]).
    .CURDIR         A path to the directory where make was executed.  The
                    make utility sets .CURDIR to the canonical path given by
    .OBJDIR         A path to the directory where the targets are built.  At
                    startup, make searches for an alternate directory to
                    place target files.  It will attempt to change into this
                    special directory and will search this directory for
                    makefiles not found in the current directory.  The fol-
                    lowing directories are tried in order:
                    1.   ${MAKEOBJDIRPREFIX}/`pwd -P`
                    2.   ${MAKEOBJDIR}
                    3.   obj.${MACHINE}
                    4.   obj
                    5.   /usr/obj/`pwd -P`
                    The first directory that make successfully changes into
                    is used.  If either MAKEOBJDIRPREFIX or MAKEOBJDIR is set
                    in the environment but make is unable to change into the
                    corresponding directory, then the current directory is
                    used without checking the remainder of the list.  If they
                    are undefined and make is unable to change into any of
                    the remaining three directories, then the current direc-
                    tory is used.  Note, that MAKEOBJDIRPREFIX and MAKEOBJDIR
                    must be environment variables and should not be set on
                    make's command line.
                    The make utility sets .OBJDIR to the canonical path given
                    by getcwd(3).
    .MAKEFILE_LIST  As make reads various makefiles, including the default
                    files and any obtained from the command line and .include
                    and .sinclude directives, their names will be automati-
                    cally appended to the .MAKEFILE_LIST variable.  They are
                    added right before make begins to parse them, so that the
                    name of the current makefile is the last word in this
    MAKEFLAGS       The environment variable MAKEFLAGS may initially contain
                    anything that may be specified on make's command line,
                    including -f option(s).  After processing, its contents
                    are stored in the .MAKEFLAGS global variable, although
                    any -f options are omitted.  Then all options and vari-
                    able assignments specified on make's command line, except
                    for -f, are appended to the .MAKEFLAGS variable.
                    Whenever make executes a program, it sets MAKEFLAGS in
                    the program's environment to the current value of the
                    .MAKEFLAGS global variable.  Thus, if MAKEFLAGS in make's
                    environment contains any -f options, they will not be
                    pushed down to child programs automatically.  The make
                    utility effectively filters out -f options from the envi-
                    ronment and command line although it passes the rest of
                    its options down to sub-makes via MAKEFLAGS by default.
                    When passing macro definitions and flag arguments in the
                    MAKEFLAGS environment variable, space and tab characters
                    are quoted by preceding them with a backslash.  When
                    reading the MAKEFLAGS variable from the environment, all
                    sequences of a backslash and one of space or tab are
                    replaced just with their second character without causing
                    a word break.  Any other occurrences of a backslash are
                    retained.  Groups of unquoted space, tab and newline
                    characters cause word breaking.
    .MAKEFLAGS      Initially, this global variable contains make's current
                    run-time options from the environment and command line as
                    described above, under MAKEFLAGS.  By modifying the con-
                    tents of the .MAKEFLAGS global variable, the makefile can
                    alter the contents of the MAKEFLAGS environment variable
                    made available for all programs which make executes.
                    This includes adding -f option(s).  The current value of
                    .MAKEFLAGS is just copied verbatim to MAKEFLAGS in the
                    environment of child programs.
                    Note that any options entered to .MAKEFLAGS neither
                    affect the current instance of make nor show up in its
                    own copy of MAKEFLAGS instantly.  However, they do show
                    up in the MAKEFLAGS environment variable of programs exe-
                    cuted by make.  On the other hand, a direct assignment to
                    MAKEFLAGS neither affects the current instance of make
                    nor is passed down to make's children.  Compare with the
                    .MAKEFLAGS special target below.
    MFLAGS          This variable is provided for backward compatibility and
                    contains all the options from the MAKEFLAGS environment
                    variable plus any options specified on make's command
    .MAKE.PID       The process-id of make.
    .MAKE.PPID      The parent process-id of make.
                    If make is run with -j -v then output for each target is
                    prefixed with a token `--- target ---' the first part of
                    which can be controlled via .MAKE.JOB.PREFIX.
                    For example:
                    would produce tokens like `---make[1234] target ---' or
                    would produce tokens like `---pid[56789],ppid[1234]
                    target ---' making it easier to track the degree of par-
                    allelism being achieved.
    .TARGETS        List of targets make is currently building.
    .INCLUDES       See .INCLUDES special target.
    .LIBS           See .LIBS special target.
    MACHINE         Name of the machine architecture make is running on,
                    obtained from the MACHINE environment variable, or
                    through uname(3) if not defined.
    MACHINE_ARCH    Name of the machine architecture make was compiled for,
                    defined at compilation time.
    VPATH           Makefiles may assign a colon-delimited list of directo-
                    ries to VPATH.  These directories will be searched for
                    source files by make after it has finished parsing all
                    input makefiles.
  Variable Modifiers
    Variable expansion may be modified to select or modify each word of the
    variable (where a ``word is whitespace-delimited sequence of charac-
    ters).  The general format of a variable expansion is as follows:
    Each modifier begins with a colon and one of the following special char-
    acters.  The colon may be escaped with a backslash (`\').
                Modify each word of the value, substituting every match of
                the extended regular expression pattern (see re_format(7))
                with the ed(1)-style replacement string.  Normally, the first
                occurrence of the pattern in each word of the value is
                changed.  The `1' modifier causes the substitution to apply
                to at most one word; the `g' modifier causes the substitution
                to apply to as many instances of the search pattern as occur
                in the word or words it is found in.  Note that `1' and `g'
                are orthogonal; the former specifies whether multiple words
                are potentially affected, the latter whether multiple substi-
                tutions can potentially occur within each affected word.
    :E          Replaces each word in the variable with its suffix.
    :H          Replaces each word in the variable with everything but the
                last component.
    :L          Converts variable to lower-case letters.
    :Mpattern   Select only those words that match the rest of the modifier.
                The standard shell wildcard characters (`*', `?', and `[]')
                may be used.  The wildcard characters may be escaped with a
                backslash (`\').
    :Npattern   This is identical to :M, but selects all words which do not
                match the rest of the modifier.
    :O          Order every word in the variable alphabetically.
    :Q          Quotes every shell meta-character in the variable, so that it
                can be passed safely through recursive invocations of make.
    :R          Replaces each word in the variable with everything but its
                Modify the first occurrence of old_string in each word of the
                variable's value, replacing it with new_string.  If a `g' is
                appended to the last slash of the pattern, all occurrences in
                each word are replaced.  If old_string begins with a caret
                (`^'), old_string is anchored at the beginning of each word.
                If old_string ends with a dollar sign (`$'), it is anchored
                at the end of each word.  Inside new_string, an ampersand
                (`&') is replaced by old_string.  Any character may be used
                as a delimiter for the parts of the modifier string.  The
                anchoring, ampersand, and delimiter characters may be escaped
                with a backslash (`\').
                Variable expansion occurs in the normal fashion inside both
                old_string and new_string with the single exception that a
                backslash is used to prevent the expansion of a dollar sign
                (`$'), not a preceding dollar sign as is usual.
                This is the AT&T System V UNIX style variable substitution.
                It must be the last modifier specified.  If old_string or
                new_string do not contain the pattern matching character %
                then it is assumed that they are anchored at the end of each
                word, so only suffixes or entire words may be replaced.  Oth-
                erwise % is the substring of old_string to be replaced in
    :T          Replaces each word in the variable with its last component.
    :U          Converts variable to upper-case letters.
    :u          Remove adjacent duplicate words (like uniq(1)).


    Directives, conditionals, and for loops reminiscent of the C programming
    language are provided in make.  All such structures are identified by a
    line beginning with a single dot (`.') character.  The following direc-
    tives are supported:
    .include <file>
    .include "file"
            Include the specified makefile.  Variables between the angle
            brackets or double quotes are expanded to form the file name.  If
            angle brackets are used, the included makefile is expected to be
            in the system makefile directory.  If double quotes are used, the
            including makefile's directory and any directories specified
            using the -I option are searched before the system makefile
    .sinclude <file>
    .sinclude "file"
            Like .include, but silently ignored if the file cannot be found
            and opened.
    .undef variable
            Un-define the specified global variable.  Only global variables
            may be un-defined.
    .error message
            Terminate processing of the makefile immediately.  The filename
            of the makefile, the line on which the error was encountered and
            the specified message are printed to the standard error output
            and make terminates with exit code 1.  Variables in the message
            are expanded.
    .warning message
            Emit a warning message.  The filename of the makefile, the line
            on which the warning was encountered, and the specified message
            are printed to the standard error output.  Variables in the mes-
            sage are expanded.
    Conditionals are used to determine which parts of the Makefile to
    process.  They are used similarly to the conditionals supported by the C
    pre-processor.  The following conditionals are supported:
    .if [!]expression [operator expression ...]
            Test the value of an expression.
    .ifdef [!]variable [operator variable ...]
            Test the value of a variable.
    .ifndef [!]variable [operator variable ...]
            Test the value of a variable.
    .ifmake [!]target [operator target ...]
            Test the target being built.
    .ifnmake [!]target [operator target ...]
            Test the target being built.
    .else   Reverse the sense of the last conditional.
    .elif [!]expression [operator expression ...]
            A combination of .else followed by .if.
    .elifdef [!]variable [operator variable ...]
            A combination of .else followed by .ifdef.
    .elifndef [!]variable [operator variable ...]
            A combination of .else followed by .ifndef.
    .elifmake [!]target [operator target ...]
            A combination of .else followed by .ifmake.
    .elifnmake [!]target [operator target ...]
            A combination of .else followed by .ifnmake.
    .endif  End the body of the conditional.
    The operator may be any one of the following:
    ||     Logical OR
    &&     Logical AND; of higher precedence than `||'.
    As in C, make will only evaluate a conditional as far as is necessary to
    determine its value.  Parentheses may be used to change the order of
    evaluation.  The boolean operator `!' may be used to logically negate an
    entire conditional.  It is of higher precedence than `&&'.
    The value of expression may be any of the following:
    defined     Takes a variable name as an argument and evaluates to true if
                the variable has been defined.
    make        Takes a target name as an argument and evaluates to true if
                the target was specified as part of make's command line or
                was declared the default target (either implicitly or explic-
                itly, see .MAIN) before the line containing the conditional.
    empty       Takes a variable, with possible modifiers, and evaluates to
                true if the expansion of the variable would result in an
                empty string.
    exists      Takes a file name as an argument and evaluates to true if the
                file exists.  The file is searched for on the system search
                path (see .PATH).
    target      Takes a target name as an argument and evaluates to true if
                the target has been defined.
    An expression may also be a numeric or string comparison: in this case,
    the left-hand side must be a variable expansion, whereas the right-hand
    side can be a constant or a variable expansion.  Variable expansion is
    performed on both sides, after which the resulting values are compared.
    A value is interpreted as hexadecimal if it is preceded by 0x, otherwise
    it is decimal; octal numbers are not supported.
    String comparison can only use the `==' or `!=' operators, whereas
    numeric values (both integer and floating point) can also be compared
    using the `>', `>=', `<' and `<=' operators.
    If no relational operator (and right-hand value) are given, an implicit
    `!= 0' is used.  However be very careful in using this feature especially
    when the left-hand side variable expansion returns a string.
    When make is evaluating one of these conditional expressions, and it
    encounters a word it does not recognize, either the ``make or
    ``defined expression is applied to it, depending on the form of the
    conditional.  If the form is .if, .ifdef or .ifndef, the ``defined
    expression is applied.  Similarly, if the form is .ifmake or .ifnmake,
    the ``make expression is applied.
    If the conditional evaluates to true the parsing of the makefile contin-
    ues as before.  If it evaluates to false, the following lines are
    skipped.  In both cases this continues until a .else or .endif is found.
    For loops are typically used to apply a set of rules to a list of files.
    The syntax of a for loop is:
    .for variable in expression
    After the for expression is evaluated, it is split into words.  The iter-
    ation variable is successively set to each word, and substituted in the
    make-rules inside the body of the for loop.

[править] COMMENTS

    Comments begin with a hash (`#') character, anywhere but in a shell com-
    mand line, and continue to the end of the line.


    .IGNORE     Ignore any errors from the commands associated with this tar-
                get, exactly as if they all were preceded by a dash (`-').
    .MAKE       Execute the commands associated with this target even if the
                -n or -t options were specified.  Normally used to mark
                recursive make's.
    .NOTMAIN    Normally make selects the first target it encounters as the
                default target to be built if no target was specified.  This
                source prevents this target from being selected.
    .OPTIONAL   If a target is marked with this attribute and make cannot
                figure out how to create it, it will ignore this fact and
                assume the file is not needed or already exists.
    .PRECIOUS   When make is interrupted, it removes any partially made tar-
                gets.  This source prevents the target from being removed.
    .SILENT     Do not echo any of the commands associated with this target,
                exactly as if they all were preceded by an at sign (`@').
    .USE        Turn the target into make's version of a macro.  When the
                target is used as a source for another target, the other tar-
                get acquires the commands, sources, and attributes (except
                for .USE) of the source.  If the target already has commands,
                the .USE target's commands are appended to them.
    .WAIT       If special .WAIT source appears in a dependency line, the
                sources that precede it are made before the sources that suc-
                ceed it in the line.  Loops are not being detected and tar-
                gets that form loops will be silently ignored.


    Special targets may not be included with other targets, i.e., they must
    be the only target specified.
    .BEGIN      Any command lines attached to this target are executed before
                anything else is done.
    .DEFAULT    This is sort of a .USE rule for any target (that was used
                only as a source) that make cannot figure out any other way
                to create.  Only the shell script is used.  The .IMPSRC vari-
                able of a target that inherits .DEFAULT's commands is set to
                the target's own name.
    .END        Any command lines attached to this target are executed after
                everything else is done.
    .IGNORE     Mark each of the sources with the .IGNORE attribute.  If no
                sources are specified, this is the equivalent of specifying
                the -i option.
    .INCLUDES   A list of suffixes that indicate files that can be included
                in a source file.  The suffix must have already been declared
                with .SUFFIXES; any suffix so declared will have the directo-
                ries on its search path (see .PATH) placed in the .INCLUDES
                special variable, each preceded by a -I flag.
    .INTERRUPT  If make is interrupted, the commands for this target will be
    .LIBS       This does for libraries what .INCLUDES does for include
                files, except that the flag used is -L.
    .MAIN       If no target is specified when make is invoked, this target
                will be built.  This is always set, either explicitly, or
                implicitly when make selects the default target, to give the
                user a way to refer to the default target on the command
                Enable the ``Remaking Makefiles functionality, as explained
                in the REMAKING MAKEFILES section below.
    .MAKEFLAGS  This target provides a way to specify flags for make when the
                makefile is used.  The flags are as if typed to the shell,
                though the -f option will have no effect.  Flags (except for
                -f) and variable assignments specified as the source for this
                target are also appended to the .MAKEFLAGS internal variable.
                Please note the difference between this target and the
                .MAKEFLAGS internal variable: specifying an option or vari-
                able assignment as the source for this target will affect
                both the current makefile and all processes that make exe-
    .MFLAGS     Same as above, for backward compatibility.
                Disable parallel mode.
                Same as above, for compatibility with other pmake variants.
    .ORDER      The named targets are made in sequence.
    .PATH       The sources are directories which are to be searched for
                files not found in the current directory.  If no sources are
                specified, any previously specified directories are deleted.
                Where possible, use of .PATH is preferred over use of the
                VPATH variable.
                The sources are directories which are to be searched for suf-
                fixed files not found in the current directory.  The make
                utility first searches the suffixed search path, before
                reverting to the default path if the file is not found there.
                This form is required for .LIBS and .INCLUDES to work.
    .PHONY      Apply the .PHONY attribute to any specified sources.  Targets
                with this attribute are always considered to be out of date.
    .POSIX      Adjust make's behavior to match the applicable POSIX specifi-
                cations.  (Note this disables the ``Remaking Makefiles fea-
    .PRECIOUS   Apply the .PRECIOUS attribute to any specified sources.  If
                no sources are specified, the .PRECIOUS attribute is applied
                to every target in the file.
    .SHELL      Select another shell.  The sources of this target have the
                format key=value.  The key is one of:
                path       Specify the path to the new shell.
                name       Specify the name of the new shell.  This may be
                           either one of the three builtin shells (see below)
                           or any other name.
                quiet      Specify the shell command to turn echoing off.
                echo       Specify the shell command to turn echoing on.
                filter     Usually shells print the echo off command before
                           turning echoing off.  This is the exact string
                           that will be printed by the shell and is used to
                           filter the shell output to remove the echo off
                echoFlag   The shell option that turns echoing on.
                errFlag    The shell option to turn on error checking.  If
                           error checking is on, the shell should exit if a
                           command returns a non-zero status.
                hasErrCtl  True if the shell has error control.
                check      If hasErrCtl is true then this is the shell com-
                           mand to turn error checking on.  If hasErrCtl is
                           false then this is a command template to echo com-
                           mands for which error checking is disabled.  The
                           template must contain a `%s'.
                ignore     If hasErrCtl is true, this is the shell command to
                           turn error checking off.  If hasErrCtl is false,
                           this is a command template to execute a command so
                           that errors are ignored.  The template must con-
                           tain a `%s'.
                meta       This is a string of meta characters of the shell.
                builtins   This is a string holding all the shell's builtin
                           commands separated by blanks.  The meta and
                           builtins strings are used in compat mode.  When a
                           command line contains neither a meta character nor
                           starts with a shell builtin, it is executed
                           directly without invoking a shell.  When one of
                           these strings (or both) is empty all commands are
                           executed through a shell.
                unsetenv   If true, remove the ENV environment variable
                           before executing any command.  This is useful for
                           the Korn-shell (ksh).
                Values that are strings must be surrounded by double quotes.
                Boolean values are specified as `T' or `Y' (in either case)
                to mean true.  Any other value is taken to mean false.
                There are several uses of the .SHELL target:
                o   Selecting one of the builtin shells.  This is done by
                    just specifying the name of the shell with the name key-
                    word.  It is also possible to modify the parameters of
                    the builtin shell by just specifying other keywords
                    (except for path).
                o   Using another executable for one of the builtin shells.
                    This is done by specifying the path to the executable
                    with the path keyword.  If the last component is the same
                    as the name of the builtin shell, no name needs to be
                    specified; if it is different, the name must be given:
                          .SHELL: path="/usr/local/bin/sh"
                    selects the builtin shell ``sh but will execute it from
                    /usr/local/bin/sh.  Like in the previous case, it is pos-
                    sible to modify parameters of the builtin shell by just
                    specifying them.
                o   Using an entirely different shell.  This is done by spec-
                    ifying all keywords.
                The builtin shells are ``sh, ``csh and ``ksh.  Because
                FreeBSD has no ksh in /bin, it is unwise to specify
                name="ksh" without also specifying a path.
    .SILENT     Apply the .SILENT attribute to any specified sources.  If no
                sources are specified, the .SILENT attribute is applied to
                every command in the file.
    .SUFFIXES   Each source specifies a suffix to make.  If no sources are
                specified, any previous specified suffixes are deleted.
    .WARN       Each source specifies a warning flag as previously described
                for the -x command line option.  Warning flags specified on
                the command line take precedence over flags specified in the
                makefile.  Also, command line warning flags are pushed to
                sub-makes through the MAKEFLAGS environment variables so that
                a warning flag specified on the command line will influence
                all sub-makes.  Several flags can be specified on a single
                .WARN target by separating them with blanks.


    If the special target .MAKEFILEDEPS exists in the Makefile, make enables
    the ``Remaking Makefiles feature.  After reading Makefile and all the
    files that are included using .include or .sinclude directives (source
    Makefiles) make considers each source Makefile as a target and tries to
    rebuild it.  Both explicit and implicit rules are checked and all source
    Makefiles are updated if necessary. If any of the source Makefiles were
    rebuilt, make restarts from clean state.
    To prevent infinite loops the following source Makefile targets are
    o   :: targets that have no prerequisites
    o   !  targets
    o   targets that have .PHONY or .EXEC attributes
    o   targets without prerequisites and without commands
    When remaking a source Makefile options -t (touch target), -q (query
    mode), and -n (no exec) do not take effect, unless source Makefile is
    specified explicitly as a target in make command line.
    Additionally, system makefiles and .depend are not considered as Make-
    files that can be rebuilt.


    The make utility uses the following environment variables, if they exist:

[править] FILES

    .depend                     list of dependencies
    Makefile                    list of dependencies
    makefile                    list of dependencies
    obj                         object directory                      system makefile
    /usr/share/mk               default system makefile directory
    /usr/share/doc/psd/12.make  PMake tutorial
    /usr/obj                    default MAKEOBJDIRPREFIX directory.
    /etc/make.conf              default path to make.conf(5)

[править] EXAMPLES

    List all included makefiles in order visited:
          make -V .MAKEFILE_LIST | tr \  \\n


    Older versions of make used MAKE instead of MAKEFLAGS.  This was removed
    for POSIX compatibility.  The internal variable MAKE is set to the same
    value as .MAKE; support for this may be removed in the future.
    Most of the more esoteric features of make should probably be avoided for
    greater compatibility.

[править] SEE ALSO

mkdep(1), make.conf(5)

    PMake - A Tutorial.  in /usr/share/doc/psd/12.make

[править] HISTORY

    A make command appeared in PWB UNIX.

[править] BUGS

    The determination of .OBJDIR is contorted to the point of absurdity.
    In the presence of several .MAIN special targets, make silently ignores
    all but the first.
    .TARGETS is not set to the default target when make is invoked without a
    target name and no .MAIN special target exists.
    The evaluation of expression in a test is very simple-minded.  Currently,
    the only form that works is `.if ${VAR} op something'.  For instance, you
    should write tests as `.if ${VAR} == string' not the other way around,
    which would give you an error.
    For loops are expanded before tests, so a fragment such as:
          .for ARCH in ${SHARED_ARCHS}
          .if ${ARCH} == ${MACHINE}
    will not work, and should be rewritten as:
          .for ARCH in ${SHARED_ARCHS}
          .if ${MACHINE} == ${ARCH}
    The parsing code is broken with respect to handling a semicolon after a
    colon, so a fragment like this will fail:
          HDRS=   foo.h bar.h
          .for h in ${HDRS:S;^;${.CURDIR}/;}
    A trailing backslash in a variable value defined on the command line
    causes the delimiting space in the MAKEFLAGS environment variable to be
    preceded by that backslash.  That causes a submake to not treat that
    space as a word delimiter.  Fixing this requires a larger rewrite of the
    code handling command line macros and assignments to .MAKEFLAGS.

FreeBSD 9.0 November 5, 2011 FreeBSD 9.0


Источник — «»