home *** CD-ROM | disk | FTP | other *** search
GNU Info File | 1996-10-12 | 36.9 KB | 976 lines |
- This is Info file make.info, produced by Makeinfo-1.64 from the input
- file /ade-src/fsf/make/make.texinfo.
-
- This file documents the GNU Make utility, which determines
- automatically which pieces of a large program need to be recompiled,
- and issues the commands to recompile them.
-
- This is Edition 0.51, last updated 9 May 1996, of `The GNU Make
- Manual', for `make', Version 3.75 Beta.
-
- Copyright (C) 1988, '89, '90, '91, '92, '93, '94, '95, '96
- Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
- manual provided the copyright notice and this permission notice are
- preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
- this manual under the conditions for verbatim copying, provided that
- the entire resulting derived work is distributed under the terms of a
- permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
- manual into another language, under the above conditions for modified
- versions, except that this permission notice may be stated in a
- translation approved by the Free Software Foundation.
-
- File: make.info, Node: Directory Variables, Next: Standard Targets, Prev: Command Variables, Up: Makefile Conventions
-
- Variables for Installation Directories
- ======================================
-
- Installation directories should always be named by variables, so it
- is easy to install in a nonstandard place. The standard names for these
- variables are described below. They are based on a standard filesystem
- layout; variants of it are used in SVR4, 4.4BSD, Linux, Ultrix v4, and
- other modern operating systems.
-
- These two variables set the root for the installation. All the other
- installation directories should be subdirectories of one of these two,
- and nothing should be directly installed into these two directories.
-
- `prefix'
- A prefix used in constructing the default values of the variables
- listed below. The default value of `prefix' should be
- `/usr/local'. When building the complete GNU system, the prefix
- will be empty and `/usr' will be a symbolic link to `/'. (If you
- are using Autoconf, write it as `@prefix@'.)
-
- `exec_prefix'
- A prefix used in constructing the default values of some of the
- variables listed below. The default value of `exec_prefix' should
- be `$(prefix)'. (If you are using Autoconf, write it as
- `@exec_prefix@'.)
-
- Generally, `$(exec_prefix)' is used for directories that contain
- machine-specific files (such as executables and subroutine
- libraries), while `$(prefix)' is used directly for other
- directories.
-
- Executable programs are installed in one of the following
- directories.
-
- `bindir'
- The directory for installing executable programs that users can
- run. This should normally be `/usr/local/bin', but write it as
- `$(exec_prefix)/bin'. (If you are using Autoconf, write it as
- `@bindir@'.)
-
- `sbindir'
- The directory for installing executable programs that can be run
- from the shell, but are only generally useful to system
- administrators. This should normally be `/usr/local/sbin', but
- write it as `$(exec_prefix)/sbin'. (If you are using Autoconf,
- write it as `@sbindir@'.)
-
- `libexecdir'
- The directory for installing executable programs to be run by other
- programs rather than by users. This directory should normally be
- `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
- (If you are using Autoconf, write it as `@libexecdir@'.)
-
- Data files used by the program during its execution are divided into
- categories in two ways.
-
- * Some files are normally modified by programs; others are never
- normally modified (though users may edit some of these).
-
- * Some files are architecture-independent and can be shared by all
- machines at a site; some are architecture-dependent and can be
- shared only by machines of the same kind and operating system;
- others may never be shared between two machines.
-
- This makes for six different possibilities. However, we want to
- discourage the use of architecture-dependent files, aside from object
- files and libraries. It is much cleaner to make other data files
- architecture-independent, and it is generally not hard.
-
- Therefore, here are the variables Makefiles should use to specify
- directories:
-
- `datadir'
- The directory for installing read-only architecture independent
- data files. This should normally be `/usr/local/share', but write
- it as `$(prefix)/share'. (If you are using Autoconf, write it as
- `@datadir@'.) As a special exception, see `$(infodir)' and
- `$(includedir)' below.
-
- `sysconfdir'
- The directory for installing read-only data files that pertain to a
- single machine-that is to say, files for configuring a host.
- Mailer and network configuration files, `/etc/passwd', and so
- forth belong here. All the files in this directory should be
- ordinary ASCII text files. This directory should normally be
- `/usr/local/etc', but write it as `$(prefix)/etc'. (If you are
- using Autoconf, write it as `@sysconfdir@'.)
-
- Do not install executables in this directory (they probably belong
- in `$(libexecdir)' or `$(sbindir)'). Also do not install files
- that are modified in the normal course of their use (programs
- whose purpose is to change the configuration of the system
- excluded). Those probably belong in `$(localstatedir)'.
-
- `sharedstatedir'
- The directory for installing architecture-independent data files
- which the programs modify while they run. This should normally be
- `/usr/local/com', but write it as `$(prefix)/com'. (If you are
- using Autoconf, write it as `@sharedstatedir@'.)
-
- `localstatedir'
- The directory for installing data files which the programs modify
- while they run, and that pertain to one specific machine. Users
- should never need to modify files in this directory to configure
- the package's operation; put such configuration information in
- separate files that go in `$(datadir)' or `$(sysconfdir)'.
- `$(localstatedir)' should normally be `/usr/local/var', but write
- it as `$(prefix)/var'. (If you are using Autoconf, write it as
- `@localstatedir@'.)
-
- `libdir'
- The directory for object files and libraries of object code. Do
- not install executables here, they probably ought to go in
- `$(libexecdir)' instead. The value of `libdir' should normally be
- `/usr/local/lib', but write it as `$(exec_prefix)/lib'. (If you
- are using Autoconf, write it as `@libdir@'.)
-
- `infodir'
- The directory for installing the Info files for this package. By
- default, it should be `/usr/local/info', but it should be written
- as `$(prefix)/info'. (If you are using Autoconf, write it as
- `@infodir@'.)
-
- `lispdir'
- The directory for installing any Emacs Lisp files in this package.
- By default, it should be `/usr/local/share/emacs/site-lisp', but
- it should be written as `$(prefix)/share/emacs/site-lisp'.
-
- If you are using Autoconf, write the default as `@lispdir@'. In
- order to make `@lispdir@' work, you need the following lines in
- your `configure.in' file:
-
- lispdir='${datadir}/emacs/site-lisp'
- AC_SUBST(lispdir)
-
- `includedir'
- The directory for installing header files to be included by user
- programs with the C `#include' preprocessor directive. This
- should normally be `/usr/local/include', but write it as
- `$(prefix)/include'. (If you are using Autoconf, write it as
- `@includedir@'.)
-
- Most compilers other than GCC do not look for header files in
- `/usr/local/include'. So installing the header files this way is
- only useful with GCC. Sometimes this is not a problem because some
- libraries are only really intended to work with GCC. But some
- libraries are intended to work with other compilers. They should
- install their header files in two places, one specified by
- `includedir' and one specified by `oldincludedir'.
-
- `oldincludedir'
- The directory for installing `#include' header files for use with
- compilers other than GCC. This should normally be `/usr/include'.
- (If you are using Autoconf, you can write it as `@oldincludedir@'.)
-
- The Makefile commands should check whether the value of
- `oldincludedir' is empty. If it is, they should not try to use
- it; they should cancel the second installation of the header files.
-
- A package should not replace an existing header in this directory
- unless the header came from the same package. Thus, if your Foo
- package provides a header file `foo.h', then it should install the
- header file in the `oldincludedir' directory if either (1) there
- is no `foo.h' there or (2) the `foo.h' that exists came from the
- Foo package.
-
- To tell whether `foo.h' came from the Foo package, put a magic
- string in the file--part of a comment--and `grep' for that string.
-
- Unix-style man pages are installed in one of the following:
-
- `mandir'
- The top-level directory for installing the man pages (if any) for
- this package. It will normally be `/usr/local/man', but you should
- write it as `$(prefix)/man'. (If you are using Autoconf, write it
- as `@mandir@'.)
-
- `man1dir'
- The directory for installing section 1 man pages. Write it as
- `$(mandir)/man1'.
-
- `man2dir'
- The directory for installing section 2 man pages. Write it as
- `$(mandir)/man2'
-
- `...'
- *Don't make the primary documentation for any GNU software be a
- man page. Write a manual in Texinfo instead. Man pages are just
- for the sake of people running GNU software on Unix, which is a
- secondary application only.*
-
- `manext'
- The file name extension for the installed man page. This should
- contain a period followed by the appropriate digit; it should
- normally be `.1'.
-
- `man1ext'
- The file name extension for installed section 1 man pages.
-
- `man2ext'
- The file name extension for installed section 2 man pages.
-
- `...'
- Use these names instead of `manext' if the package needs to
- install man pages in more than one section of the manual.
-
- And finally, you should set the following variable:
-
- `srcdir'
- The directory for the sources being compiled. The value of this
- variable is normally inserted by the `configure' shell script.
- (If you are using Autconf, use `srcdir = @srcdir@'.)
-
- For example:
-
- # Common prefix for installation directories.
- # NOTE: This directory must exist when you start the install.
- prefix = /usr/local
- exec_prefix = $(prefix)
- # Where to put the executable for the command `gcc'.
- bindir = $(exec_prefix)/bin
- # Where to put the directories used by the compiler.
- libexecdir = $(exec_prefix)/libexec
- # Where to put the Info files.
- infodir = $(prefix)/info
-
- If your program installs a large number of files into one of the
- standard user-specified directories, it might be useful to group them
- into a subdirectory particular to that program. If you do this, you
- should write the `install' rule to create these subdirectories.
-
- Do not expect the user to include the subdirectory name in the value
- of any of the variables listed above. The idea of having a uniform set
- of variable names for installation directories is to enable the user to
- specify the exact same values for several different GNU packages. In
- order for this to be useful, all the packages must be designed so that
- they will work sensibly when the user does so.
-
- File: make.info, Node: Standard Targets, Prev: Directory Variables, Up: Makefile Conventions
-
- Standard Targets for Users
- ==========================
-
- All GNU programs should have the following targets in their
- Makefiles:
-
- `all'
- Compile the entire program. This should be the default target.
- This target need not rebuild any documentation files; Info files
- should normally be included in the distribution, and DVI files
- should be made only when explicitly asked for.
-
- By default, the Make rules should compile and link with `-g', so
- that executable programs have debugging symbols. Users who don't
- mind being helpless can strip the executables later if they wish.
-
- `install'
- Compile the program and copy the executables, libraries, and so on
- to the file names where they should reside for actual use. If
- there is a simple test to verify that a program is properly
- installed, this target should run that test.
-
- Do not strip executables when installing them. Devil-may-care
- users can use the `install-strip' target to do that.
-
- If possible, write the `install' target rule so that it does not
- modify anything in the directory where the program was built,
- provided `make all' has just been done. This is convenient for
- building the program under one user name and installing it under
- another.
-
- The commands should create all the directories in which files are
- to be installed, if they don't already exist. This includes the
- directories specified as the values of the variables `prefix' and
- `exec_prefix', as well as all subdirectories that are needed. One
- way to do this is by means of an `installdirs' target as described
- below.
-
- Use `-' before any command for installing a man page, so that
- `make' will ignore any errors. This is in case there are systems
- that don't have the Unix man page documentation system installed.
-
- The way to install Info files is to copy them into `$(infodir)'
- with `$(INSTALL_DATA)' (*note Command Variables::.), and then run
- the `install-info' program if it is present. `install-info' is a
- program that edits the Info `dir' file to add or update the menu
- entry for the given Info file; it is part of the Texinfo package.
- Here is a sample rule to install an Info file:
-
- $(infodir)/foo.info: foo.info
- # There may be a newer info file in . than in srcdir.
- -if test -f foo.info; then d=.; \
- else d=$(srcdir); fi; \
- $(INSTALL_DATA) $$d/foo.info $@; \
- # Run install-info only if it exists.
- # Use `if' instead of just prepending `-' to the
- # line so we notice real errors from install-info.
- # We use `$(SHELL) -c' because some shells do not
- # fail gracefully when there is an unknown command.
- if $(SHELL) -c 'install-info --version' \
- >/dev/null 2>&1; then \
- install-info --dir-file=$(infodir)/dir \
- $(infodir)/foo.info; \
- else true; fi
-
- `uninstall'
- Delete all the installed files that the `install' target would
- create (but not the noninstalled files such as `make all' would
- create).
-
- This rule should not modify the directories where compilation is
- done, only the directories where files are installed.
-
- `install-strip'
- Like `install', but strip the executable files while installing
- them. The definition of this target can be very simple:
-
- install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
- install
-
- Normally we do not recommend stripping an executable unless you
- are sure the program has no bugs. However, it can be reasonable
- to install a stripped executable for actual execution while saving
- the unstripped executable elsewhere in case there is a bug.
-
- `clean'
- Delete all files from the current directory that are normally
- created by building the program. Don't delete the files that
- record the configuration. Also preserve files that could be made
- by building, but normally aren't because the distribution comes
- with them.
-
- Delete `.dvi' files here if they are not part of the distribution.
-
- `distclean'
- Delete all files from the current directory that are created by
- configuring or building the program. If you have unpacked the
- source and built the program without creating any other files,
- `make distclean' should leave only the files that were in the
- distribution.
-
- `mostlyclean'
- Like `clean', but may refrain from deleting a few files that people
- normally don't want to recompile. For example, the `mostlyclean'
- target for GCC does not delete `libgcc.a', because recompiling it
- is rarely necessary and takes a lot of time.
-
- `maintainer-clean'
- Delete almost everything from the current directory that can be
- reconstructed with this Makefile. This typically includes
- everything deleted by `distclean', plus more: C source files
- produced by Bison, tags tables, Info files, and so on.
-
- The reason we say "almost everything" is that running the command
- `make maintainer-clean' should not delete `configure' even if
- `configure' can be remade using a rule in the Makefile. More
- generally, `make maintainer-clean' should not delete anything that
- needs to exist in order to run `configure' and then begin to build
- the program. This is the only exception; `maintainer-clean' should
- delete everything else that can be rebuilt.
-
- The `maintainer-clean' target is intended to be used by a
- maintainer of the package, not by ordinary users. You may need
- special tools to reconstruct some of the files that `make
- maintainer-clean' deletes. Since these files are normally
- included in the distribution, we don't take care to make them easy
- to reconstruct. If you find you need to unpack the full
- distribution again, don't blame us.
-
- To help make users aware of this, the commands for the special
- `maintainer-clean' target should start with these two:
-
- @echo 'This command is intended for maintainers to use; it'
- @echo 'deletes files that may need special tools to rebuild.'
-
- `TAGS'
- Update a tags table for this program.
-
- `info'
- Generate any Info files needed. The best way to write the rules
- is as follows:
-
- info: foo.info
-
- foo.info: foo.texi chap1.texi chap2.texi
- $(MAKEINFO) $(srcdir)/foo.texi
-
- You must define the variable `MAKEINFO' in the Makefile. It should
- run the `makeinfo' program, which is part of the Texinfo
- distribution.
-
- `dvi'
- Generate DVI files for all Texinfo documentation. For example:
-
- dvi: foo.dvi
-
- foo.dvi: foo.texi chap1.texi chap2.texi
- $(TEXI2DVI) $(srcdir)/foo.texi
-
- You must define the variable `TEXI2DVI' in the Makefile. It should
- run the program `texi2dvi', which is part of the Texinfo
- distribution.(1) Alternatively, write just the dependencies, and
- allow GNU `make' to provide the command.
-
- `dist'
- Create a distribution tar file for this program. The tar file
- should be set up so that the file names in the tar file start with
- a subdirectory name which is the name of the package it is a
- distribution for. This name can include the version number.
-
- For example, the distribution tar file of GCC version 1.40 unpacks
- into a subdirectory named `gcc-1.40'.
-
- The easiest way to do this is to create a subdirectory
- appropriately named, use `ln' or `cp' to install the proper files
- in it, and then `tar' that subdirectory.
-
- Compress the tar file file with `gzip'. For example, the actual
- distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.
-
- The `dist' target should explicitly depend on all non-source files
- that are in the distribution, to make sure they are up to date in
- the distribution. *Note Making Releases: (standards)Releases.
-
- `check'
- Perform self-tests (if any). The user must build the program
- before running the tests, but need not install the program; you
- should write the self-tests so that they work when the program is
- built but not installed.
-
- The following targets are suggested as conventional names, for
- programs in which they are useful.
-
- `installcheck'
- Perform installation tests (if any). The user must build and
- install the program before running the tests. You should not
- assume that `$(bindir)' is in the search path.
-
- `installdirs'
- It's useful to add a target named `installdirs' to create the
- directories where files are installed, and their parent
- directories. There is a script called `mkinstalldirs' which is
- convenient for this; you can find it in the Texinfo package. You
- can use a rule like this:
-
- # Make sure all installation directories (e.g. $(bindir))
- # actually exist by making them if necessary.
- installdirs: mkinstalldirs
- $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
- $(libdir) $(infodir) \
- $(mandir)
-
- This rule should not modify the directories where compilation is
- done. It should do nothing but create installation directories.
-
- ---------- Footnotes ----------
-
- (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is
- not distributed with Texinfo.
-
- File: make.info, Node: Quick Reference, Next: Complex Makefile, Prev: Makefile Conventions, Up: Top
-
- Quick Reference
- ***************
-
- This appendix summarizes the directives, text manipulation functions,
- and special variables which GNU `make' understands. *Note Special
- Targets::, *Note Catalogue of Implicit Rules: Catalogue of Rules, and
- *Note Summary of Options: Options Summary, for other summaries.
-
- Here is a summary of the directives GNU `make' recognizes:
-
- `define VARIABLE'
- `endef'
- Define a multi-line, recursively-expanded variable.
- *Note Sequences::.
-
- `ifdef VARIABLE'
- `ifndef VARIABLE'
- `ifeq (A,B)'
- `ifeq "A" "B"'
- `ifeq 'A' 'B''
- `ifneq (A,B)'
- `ifneq "A" "B"'
- `ifneq 'A' 'B''
- `else'
- `endif'
- Conditionally evaluate part of the makefile.
- *Note Conditionals::.
-
- `include FILE'
- Include another makefile.
- *Note Including Other Makefiles: Include.
-
- `override VARIABLE = VALUE'
- `override VARIABLE := VALUE'
- `override VARIABLE += VALUE'
- `override define VARIABLE'
- `endef'
- Define a variable, overriding any previous definition, even one
- from the command line.
- *Note The `override' Directive: Override Directive.
-
- `export'
- Tell `make' to export all variables to child processes by default.
- *Note Communicating Variables to a Sub-`make': Variables/Recursion.
-
- `export VARIABLE'
- `export VARIABLE = VALUE'
- `export VARIABLE := VALUE'
- `export VARIABLE += VALUE'
- `unexport VARIABLE'
- Tell `make' whether or not to export a particular variable to child
- processes.
- *Note Communicating Variables to a Sub-`make': Variables/Recursion.
-
- `vpath PATTERN PATH'
- Specify a search path for files matching a `%' pattern.
- *Note The `vpath' Directive: Selective Search.
-
- `vpath PATTERN'
- Remove all search paths previously specified for PATTERN.
-
- `vpath'
- Remove all search paths previously specified in any `vpath'
- directive.
-
- Here is a summary of the text manipulation functions (*note
- Functions::.):
-
- `$(subst FROM,TO,TEXT)'
- Replace FROM with TO in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(patsubst PATTERN,REPLACEMENT,TEXT)'
- Replace words matching PATTERN with REPLACEMENT in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(strip STRING)'
- Remove excess whitespace characters from STRING.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(findstring FIND,TEXT)'
- Locate FIND in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(filter PATTERN...,TEXT)'
- Select words in TEXT that match one of the PATTERN words.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(filter-out PATTERN...,TEXT)'
- Select words in TEXT that *do not* match any of the PATTERN words.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(sort LIST)'
- Sort the words in LIST lexicographically, removing duplicates.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(dir NAMES...)'
- Extract the directory part of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(notdir NAMES...)'
- Extract the non-directory part of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(suffix NAMES...)'
- Extract the suffix (the last `.' and following characters) of each
- file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(basename NAMES...)'
- Extract the base name (name without suffix) of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(addsuffix SUFFIX,NAMES...)'
- Append SUFFIX to each word in NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(addprefix PREFIX,NAMES...)'
- Prepend PREFIX to each word in NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(join LIST1,LIST2)'
- Join two parallel lists of words.
- *Note Functions for File Names: Filename Functions.
-
- `$(word N,TEXT)'
- Extract the Nth word (one-origin) of TEXT.
- *Note Functions for File Names: Filename Functions.
-
- `$(words TEXT)'
- Count the number of words in TEXT.
- *Note Functions for File Names: Filename Functions.
-
- `$(firstword NAMES...)'
- Extract the first word of NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(wildcard PATTERN...)'
- Find file names matching a shell file name pattern (*not* a `%'
- pattern).
- *Note The Function `wildcard': Wildcard Function.
-
- `$(shell COMMAND)'
- Execute a shell command and return its output.
- *Note The `shell' Function: Shell Function.
-
- `$(origin VARIABLE)'
- Return a string describing how the `make' variable VARIABLE was
- defined.
- *Note The `origin' Function: Origin Function.
-
- `$(foreach VAR,WORDS,TEXT)'
- Evaluate TEXT with VAR bound to each word in WORDS, and
- concatenate the results.
- *Note The `foreach' Function: Foreach Function.
-
- Here is a summary of the automatic variables. *Note Automatic
- Variables: Automatic, for full information.
-
- `$@'
- The file name of the target.
-
- `$%'
- The target member name, when the target is an archive member.
-
- `$<'
- The name of the first dependency.
-
- `$?'
- The names of all the dependencies that are newer than the target,
- with spaces between them. For dependencies which are archive
- members, only the member named is used (*note Archives::.).
-
- `$^'
- `$+'
- The names of all the dependencies, with spaces between them. For
- dependencies which are archive members, only the member named is
- used (*note Archives::.). The value of `$^' omits duplicate
- dependencies, while `$+' retains them and preserves their order.
-
- `$*'
- The stem with which an implicit rule matches (*note How Patterns
- Match: Pattern Match.).
-
- `$(@D)'
- `$(@F)'
- The directory part and the file-within-directory part of `$@'.
-
- `$(*D)'
- `$(*F)'
- The directory part and the file-within-directory part of `$*'.
-
- `$(%D)'
- `$(%F)'
- The directory part and the file-within-directory part of `$%'.
-
- `$(<D)'
- `$(<F)'
- The directory part and the file-within-directory part of `$<'.
-
- `$(^D)'
- `$(^F)'
- The directory part and the file-within-directory part of `$^'.
-
- `$(+D)'
- `$(+F)'
- The directory part and the file-within-directory part of `$+'.
-
- `$(?D)'
- `$(?F)'
- The directory part and the file-within-directory part of `$?'.
-
- These variables are used specially by GNU `make':
-
- `MAKEFILES'
- Makefiles to be read on every invocation of `make'.
- *Note The Variable `MAKEFILES': MAKEFILES Variable.
-
- `VPATH'
- Directory search path for files not found in the current directory.
- *Note `VPATH' Search Path for All Dependencies: General Search.
-
- `SHELL'
- The name of the system default command interpreter, usually
- `/bin/sh'. You can set `SHELL' in the makefile to change the
- shell used to run commands. *Note Command Execution: Execution.
-
- `MAKE'
- The name with which `make' was invoked. Using this variable in
- commands has special meaning. *Note How the `MAKE' Variable
- Works: MAKE Variable.
-
- `MAKELEVEL'
- The number of levels of recursion (sub-`make's).
- *Note Variables/Recursion::.
-
- `MAKEFLAGS'
- The flags given to `make'. You can set this in the environment or
- a makefile to set flags.
- *Note Communicating Options to a Sub-`make': Options/Recursion.
-
- `SUFFIXES'
- The default list of suffixes before `make' reads any makefiles.
-
- File: make.info, Node: Complex Makefile, Next: Concept Index, Prev: Quick Reference, Up: Top
-
- Complex Makefile Example
- ************************
-
- Here is the makefile for the GNU `tar' program. This is a
- moderately complex makefile.
-
- Because it is the first target, the default goal is `all'. An
- interesting feature of this makefile is that `testpad.h' is a source
- file automatically created by the `testpad' program, itself compiled
- from `testpad.c'.
-
- If you type `make' or `make all', then `make' creates the `tar'
- executable, the `rmt' daemon that provides remote tape access, and the
- `tar.info' Info file.
-
- If you type `make install', then `make' not only creates `tar',
- `rmt', and `tar.info', but also installs them.
-
- If you type `make clean', then `make' removes the `.o' files, and
- the `tar', `rmt', `testpad', `testpad.h', and `core' files.
-
- If you type `make distclean', then `make' not only removes the same
- files as does `make clean' but also the `TAGS', `Makefile', and
- `config.status' files. (Although it is not evident, this makefile (and
- `config.status') is generated by the user with the `configure' program,
- which is provided in the `tar' distribution, but is not shown here.)
-
- If you type `make realclean', then `make' removes the same files as
- does `make distclean' and also removes the Info files generated from
- `tar.texinfo'.
-
- In addition, there are targets `shar' and `dist' that create
- distribution kits.
-
- # Generated automatically from Makefile.in by configure.
- # Un*x Makefile for GNU tar program.
- # Copyright (C) 1991 Free Software Foundation, Inc.
-
- # This program is free software; you can redistribute
- # it and/or modify it under the terms of the GNU
- # General Public License ...
- ...
- ...
-
- SHELL = /bin/sh
-
- #### Start of system configuration section. ####
-
- srcdir = .
-
- # If you use gcc, you should either run the
- # fixincludes script that comes with it or else use
- # gcc with the -traditional option. Otherwise ioctl
- # calls will be compiled incorrectly on some systems.
- CC = gcc -O
- YACC = bison -y
- INSTALL = /usr/local/bin/install -c
- INSTALLDATA = /usr/local/bin/install -c -m 644
-
- # Things you might add to DEFS:
- # -DSTDC_HEADERS If you have ANSI C headers and
- # libraries.
- # -DPOSIX If you have POSIX.1 headers and
- # libraries.
- # -DBSD42 If you have sys/dir.h (unless
- # you use -DPOSIX), sys/file.h,
- # and st_blocks in `struct stat'.
- # -DUSG If you have System V/ANSI C
- # string and memory functions
- # and headers, sys/sysmacros.h,
- # fcntl.h, getcwd, no valloc,
- # and ndir.h (unless
- # you use -DDIRENT).
- # -DNO_MEMORY_H If USG or STDC_HEADERS but do not
- # include memory.h.
- # -DDIRENT If USG and you have dirent.h
- # instead of ndir.h.
- # -DSIGTYPE=int If your signal handlers
- # return int, not void.
- # -DNO_MTIO If you lack sys/mtio.h
- # (magtape ioctls).
- # -DNO_REMOTE If you do not have a remote shell
- # or rexec.
- # -DUSE_REXEC To use rexec for remote tape
- # operations instead of
- # forking rsh or remsh.
- # -DVPRINTF_MISSING If you lack vprintf function
- # (but have _doprnt).
- # -DDOPRNT_MISSING If you lack _doprnt function.
- # Also need to define
- # -DVPRINTF_MISSING.
- # -DFTIME_MISSING If you lack ftime system call.
- # -DSTRSTR_MISSING If you lack strstr function.
- # -DVALLOC_MISSING If you lack valloc function.
- # -DMKDIR_MISSING If you lack mkdir and
- # rmdir system calls.
- # -DRENAME_MISSING If you lack rename system call.
- # -DFTRUNCATE_MISSING If you lack ftruncate
- # system call.
- # -DV7 On Version 7 Unix (not
- # tested in a long time).
- # -DEMUL_OPEN3 If you lack a 3-argument version
- # of open, and want to emulate it
- # with system calls you do have.
- # -DNO_OPEN3 If you lack the 3-argument open
- # and want to disable the tar -k
- # option instead of emulating open.
- # -DXENIX If you have sys/inode.h
- # and need it 94 to be included.
-
- DEFS = -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \
- -DVPRINTF_MISSING -DBSD42
- # Set this to rtapelib.o unless you defined NO_REMOTE,
- # in which case make it empty.
- RTAPELIB = rtapelib.o
- LIBS =
- DEF_AR_FILE = /dev/rmt8
- DEFBLOCKING = 20
-
- CDEBUG = -g
- CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \
- -DDEF_AR_FILE=\"$(DEF_AR_FILE)\" \
- -DDEFBLOCKING=$(DEFBLOCKING)
- LDFLAGS = -g
-
- prefix = /usr/local
- # Prefix for each installed program,
- # normally empty or `g'.
- binprefix =
-
- # The directory to install tar in.
- bindir = $(prefix)/bin
-
- # The directory to install the info files in.
- infodir = $(prefix)/info
-
- #### End of system configuration section. ####
-
- SRC1 = tar.c create.c extract.c buffer.c \
- getoldopt.c update.c gnu.c mangle.c
- SRC2 = version.c list.c names.c diffarch.c \
- port.c wildmat.c getopt.c
- SRC3 = getopt1.c regex.c getdate.y
- SRCS = $(SRC1) $(SRC2) $(SRC3)
- OBJ1 = tar.o create.o extract.o buffer.o \
- getoldopt.o update.o gnu.o mangle.o
- OBJ2 = version.o list.o names.o diffarch.o \
- port.o wildmat.o getopt.o
- OBJ3 = getopt1.o regex.o getdate.o $(RTAPELIB)
- OBJS = $(OBJ1) $(OBJ2) $(OBJ3)
- AUX = README COPYING ChangeLog Makefile.in \
- makefile.pc configure configure.in \
- tar.texinfo tar.info* texinfo.tex \
- tar.h port.h open3.h getopt.h regex.h \
- rmt.h rmt.c rtapelib.c alloca.c \
- msd_dir.h msd_dir.c tcexparg.c \
- level-0 level-1 backup-specs testpad.c
-
- all: tar rmt tar.info
-
- tar: $(OBJS)
- $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
-
- rmt: rmt.c
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c
-
- tar.info: tar.texinfo
- makeinfo tar.texinfo
-
- install: all
- $(INSTALL) tar $(bindir)/$(binprefix)tar
- -test ! -f rmt || $(INSTALL) rmt /etc/rmt
- $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)
-
- $(OBJS): tar.h port.h testpad.h
- regex.o buffer.o tar.o: regex.h
- # getdate.y has 8 shift/reduce conflicts.
-
- testpad.h: testpad
- ./testpad
-
- testpad: testpad.o
- $(CC) -o $@ testpad.o
-
- TAGS: $(SRCS)
- etags $(SRCS)
-
- clean:
- rm -f *.o tar rmt testpad testpad.h core
-
- distclean: clean
- rm -f TAGS Makefile config.status
-
- realclean: distclean
- rm -f tar.info*
-
- shar: $(SRCS) $(AUX)
- shar $(SRCS) $(AUX) | compress \
- > tar-`sed -e '/version_string/!d' \
- -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
- -e q
- version.c`.shar.Z
-
- dist: $(SRCS) $(AUX)
- echo tar-`sed \
- -e '/version_string/!d' \
- -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
- -e q
- version.c` > .fname
- -rm -rf `cat .fname`
- mkdir `cat .fname`
- ln $(SRCS) $(AUX) `cat .fname`
- -rm -rf `cat .fname` .fname
- tar chZf `cat .fname`.tar.Z `cat .fname`
-
- tar.zoo: $(SRCS) $(AUX)
- -rm -rf tmp.dir
- -mkdir tmp.dir
- -rm tar.zoo
- for X in $(SRCS) $(AUX) ; do \
- echo $$X ; \
- sed 's/$$/^M/' $$X \
- > tmp.dir/$$X ; done
- cd tmp.dir ; zoo aM ../tar.zoo *
- -rm -rf tmp.dir
-
-