home *** CD-ROM | disk | FTP | other *** search
- MAKE (1)
-
- NAME
-
- make - maintain program dependencies
-
- SYNOPSIS
-
- make [ eiknqrstv ] [ D ] [ d ] [ f ] [ I ] [ j ] [
- variable=value ] [ target ]
- DESCRIPTION
-
- Make is a program designed to simplify the maintenance of other
- programs. Its input is a list of specifications as to the files
- upon which programs and other files depend. If the file [Pa] ex-
- ists, it is read for this list of specifications. If it does not
- exist, the file [Pa] is read. If the file [Pa] exists, it is
- read (see mkdep (1)) .
- This manual page is intended as a reference document only. For
- a more thorough description of make and makefiles, please refer
- to
- The options are as follows:
- D - Define Ar variable to be 1, in the global context.
- d - Turn on debugging, and specify which portions of make
- are to print debugging information. 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 caching.
- c - Print debugging information about conditional
- evaluation.
- d - Print debugging information about directory search-
- ing and caching.
- 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
- shells.
- m - Print debugging information about making targets,
- including modification dates.
- s - Print debugging information about suffix-
- transformation rules.
- t - Print debugging information about target list
- maintenance.
- v - Print debugging information about variable assign-
- ment.
- e - Specify that environmental variables override macro as-
- signments within makefiles.
- f - Specify a makefile to read instead of the default [Pa]
- and [Pa] If makefile is [Fl] standard input is read. Multi-
- ple makefile's may be specified, and are read in the order
- specified.
- I - Specify a directory in which to search for makefiles and
- included makefiles. The system makefile directory is au-
- tomatically included as part of this list.
- i - Ignore non-zero exit of shell commands in the makefile.
- Equivalent to specifying [Fl] before each command line in
- the makefile.
- j - Specify the maximum number of jobs that make may have
- running at any one time.
- k - Continue processing after errors are encountered, but
- only on those targets that do not depend on the target whose
- creation caused the error.
- n - Display the commands that would have been executed, but
- do not actually execute them.
- q - Do not execute any commands, but exit 0 if the specified
- targets are up-to-date and 1, otherwise.
- r - Do not use the built-in rules specified in the system
- makefile.
- s - Do not echo any commands as they are executed.
- Equivalent to specifying [Ic] 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-to-date.
- variable=value - Set the value of the variable variable to
- value .
- There are six different types of lines in a makefile: file
- dependency specifications, shell commands, variable assignments,
- include statements, conditional directives, 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.
- FILE DEPENDENCY SPECIFICATIONS
-
- 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 separates 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 accumulate 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. Otherwise, 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 depen-
- dency lines when this operator is used. The target will not
- be removed if make is interrupted.
- Targets and sources may contain the shell wildcard values [?]
- [*] [[]] and [{}] The values [?] [*] 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 value [{}] need not neces-
- sarily be used to describe existing files. Expansion is in
- directory order, not alphabetically as done in the shell.
- SHELL COMMANDS
-
- Each target may have associated with it a series of shell com-
- mands, normally used to create the target. Each of the commands
- in this script be preceded by a tab. While any target may appear
- on a dependency line, only one of these dependencies may be fol-
- lowed by a creation script, unless the [Ic] operator is used.
- If the first or first two characters of the command line are
- [Ic] and/or [Ic] the command is treated specially. A [Ic] causes
- the command not to be echoed before it is executed. A [Ic]
- causes any non-zero exit status of the command line to be ig-
- nored.
- VARIABLE ASSIGNMENTS
-
- Variables in make are much like variables in the shell, and, by
- tradition, 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
- overridden.
- += - 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 as-
- signing it to the variable. Normally, expansion is not done
- until the variable 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 white-space 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 parenthesis and preceding it with a dollar
- sign If the variable name contains only a single letter, the sur-
- rounding braces or parenthesis are not required. This shorter
- form is not recommended.
- 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 com-
- mands are expanded when the shell command is executed.
- The four different classes of variables (in order of increasing
- precedence) are:
- variables - Variables defined as part of make environment.
- variables - Variables defined in the makefile or in included
- makefiles.
- line - Variables defined as part of the command line.
- variables - Variables that are defined specific to a certain
- target. The seven local variables are as follows:
- The list of all sources for this target; also known as
- [Va]
- The name of the archive file.
- The name/path of the source from which the target is to
- be transformed (the ``implied'' source); also known as
- [Va]
- The name of the archive member.
- The list of sources for this target that were deemed
- out-of-date; also known as [Va]
- The file prefix of the file, containing only the file
- portion, no suffix or preceding directory components;
- also known as [Va]
- The name of the target; also known as [Va]
- The shorter forms [Va] [Va] [Va] and [Va] are permitted
- for backward compatibility with historical makefiles and are
- not recommended. The six variables [Va] [Va] [Va] [Va] [Va]
- and [Va] are permitted for compatibility with 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 [Va] [Va] [Va]
- and [Va]
- In addition, make sets or knows about the following vari-
- ables:
- $ - A single dollar sign [$] i.e. [$$] expands to a
- single dollar sign.
- The name that make was executed with
- A path to the directory where make was executed.
- MAKEFLAGS - The environment variable [Ev] may contain
- anything that may be specified on make command line.
- Anything specified on make command line is appended to
- the [Ev] variable which is then entered into the en-
- vironment for all programs which make executes.
- Variable expansion may be modified to select or modify
- each word of the variable (where a ``word'' is white-space
- delimited sequence of characters). The general format of a
- variable expansion is as follows:
- Each modifier begins with a colon and one of the following
- special characters. The colon may be escaped with a
- backslash
- E - Replaces each word in the variable with its suffix.
- H - Replaces each word in the variable with everything
- but the last component.
- M - Select only those words that match the rest of the
- modifier. The standard shell wildcard characters [?]
- and [Op] may be used. The wildcard characters may be
- escaped with a backslash
- N - This is identical to [Cm] but selects all words
- which do not match the rest of the modifier.
- R - Replaces each word in the variable with everything
- but its suffix.
- S - Modify the first occurrence of old_pattern in each
- word to be replaced with new_pattern . If a [g] is ap-
- pended to the last slash of the pattern, all oc-
- currences in each word are replaced. If old_pattern
- begins with a carat old_pattern is anchored at the be-
- ginning of each word. If old_pattern ends with a dol-
- lar sign it is anchored at the end of each word. In-
- side new_string , an ampersand is replaced by
- old_pattern . 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 in-
- side both old_string and new_string with the single ex-
- ception that a backslash is used to prevent the expan-
- sion of a dollar sign not a preceding dollar sign as is
- usual.
- T - Replaces each word in the variable with its last
- component.
- old_string=new_string - This is the style variable sub-
- stitution. It must be the last modifier specified.
- Old_string is anchored at the end of each word, so only
- suffixes or entire words may be replaced.
- INCLUDE STATEMENTS AND CONDITIONALS
-
- Makefile inclusion and conditional structures reminiscent
- of the C programming language are provided in make All such
- structures are identified by a line beginning with a single
- dot character. Files are included with either [.include] or
- [.include] Variables between the angle brackets or double
- quotes are expanded to form the file name. If angle brack-
- ets 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 option are searched before the system makefile
- directory.
- Conditional expressions are also preceded by a single dot
- as the first chraracter of a line. The possible condition-
- als are as follows:
- Un-define the specified global variable. Only global
- variables may be un-defined.
- - [ operator ] Test the value of an expression.
- - [ operator ] Test the value of an variable.
- - [ operator ] Test the value of an variable.
- - [ operator ] Test the the target being built.
- - [ operator ] Test the target being built.
- Reverse the sense of the last conditional.
- - [ operator ] A combination of [Ic] followed by [Ic]
- - [ operator ] A combination of [Ic] followed by [Ic]
- - [ operator ] A combination of [Ic] followed by [Ic]
- - [ operator ] A combination of [Ic] followed by [Ic]
- - [ operator ] A combination of [Ic] followed by [Ic]
- End the body of the conditional.
- The operator may be any one of the following:
- || - logical OR
- && - Logical of higher precedence than
- As in C, make will only evaluate a conditional as far as
- is necessary to determine its value. Parenthesis may be
- used to change the order of evaluation. The boolean opera-
- tor [Ic] may be used to logically negate an entire condi-
- tional. It is of higher precendence than [Ic]
- 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
- command line or was declared the default target (either
- implicitly or explicitly, see before the line contain-
- ing the conditional.
- empty - Takes a variable, with possible modifiers, and
- evalutes 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
- target - Takes a target name as an argument and evalu-
- ates to true if the target has been defined.
- Expression may also be an arithmetic or string comparison,
- with the left-hand side being a variable expansion. The
- standard C relational operators are all supported, and the
- usual number/base conversion is performed. Note, octal
- numbers are not supported. If the righthand value of a [Ic]
- or [Ic] operator begins with a quotation mark a string com-
- parison is done between the expanded variable and the text
- between the quotation marks. If no relational operator is
- given, it is assumed that the expanded variable is being
- compared against 0.
- When make is evaluating one of these conditional expres-
- sion, and it encounters a word it doesn't recognize, either
- the ``make'' or ``defined'' expression is applied to it,
- depending on the form of the conditional. If the form is
- [Ic] or [Ic] the ``defined'' expression is applied. Simi-
- larly, if the form is [Ic] or [Ic] expression is applied.
- If the conditional evaluates to true the parsing of the
- makefile continues as before. If it evaluates to false, the
- following lines are skipped. In both cases this continues
- until a [Ic] or [Ic] is found.
- COMMENTS
-
- Comments begin with a hash character, anywhere but in a
- shell command line, and continue to the end of the line.
- SPECIAL SOURCES
-
- Ignore any errors from the commands associated with
- this target, exactly as if they all were preceded by a
- dash
- Execute the commands associated with this target even
- if the or options were specified. Normally used to
- mark recursive make
- Normally make selects the first target it encounters as
- the default target to be built if no target was speci-
- fied. This source prevents this target from being
- selected.
- If a target is marked with this attribute and make
- can't figure out how to create it, it will ignore this
- fact and assume the file isn't needed or already ex-
- ists.
- When make is interrupted, it removes any partially made
- targets. This source prevents the target from being
- removed.
- Do not echo any of the commands associated with this
- target, exactly as if they all were preceded by an at
- sign
- Turn the target into make version of a macro. When the
- target is used as a source for another target, the oth-
- er target acquires the commands, sources, and attri-
- butes (except for of the source. If the target already
- has commands, the target's commands are appended to
- them.
- SPECIAL TARGETS
-
- Special targets may not be included with other targets,
- i.e. they must be the only target specified.
- Any command lines attached to this target are executed
- before anything else is done.
- This is sort of a rule for any target (that was used
- only as a source) that make can't figure out any other
- way to create. Only the shell script is used. The
- variable of a target that inherits commands is set to
- the target's own name.
- Any command lines attached to this target are executed
- after everything else is done.
- Mark each of the sources with the attribute. If no
- sources are specified, this is the equivalent of speci-
- fying the option.
- If make is interrupted, the commands for this target
- will be executed.
- If no target is specified when make is invoked, this
- target will be built.
- 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 option will have no effect.
- 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 direc-
- tories are deleted.
- Apply the attribute to any specified sources. If no
- sources are specified, the attribute is applied to
- every target in the file.
- Apply the attribute to any specified sources. If no
- sources are specified, the attribute is applied to
- every command in the file.
- Each source specifies a suffix to make If no sources
- are specified, any previous specifies suffices are
- deleted.
- ENVIRONMENT
-
- Make utilizes the following environment variables, if
- they exist: and
- FILES
-
- - list of dependencies
- - list of dependencies
- - list of dependencies
- - system makefile
- - system makefile directory
- SEE ALSO
-
- mkdep (1)
- HISTORY
-
- A Make command appeared in
-
-
-