home *** CD-ROM | disk | FTP | other *** search
GNU Info File | 1993-05-16 | 25.6 KB | 718 lines |
- This is Info file make.info, produced by Makeinfo-1.54 from the input
- file 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.42, last updated 14 May 1993, of `The GNU Make
- Manual', for `make', Version 3.66 Beta.
-
- Copyright (C) 1988, '89, '90, '91, '92, '93 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 also
- that the section entitled "GNU General Public License" is included
- exactly as in the original, and 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 the text of the translations of the section
- entitled "GNU General Public License" must be approved for accuracy by
- the Foundation.
-
- File: make.info, Node: Command Variables, Next: Directory Variables, Prev: Standard Targets, Up: Makefile Conventions
-
- Variables for Specifying Commands
- =================================
-
- Makefiles should provide variables for overriding certain commands,
- options, and so on.
-
- In particular, you should run most utility programs via variables.
- Thus, if you use Bison, have a variable named `BISON' whose default
- value is set with `BISON = bison', and refer to it with `$(BISON)'
- whenever you need to use Bison.
-
- File management utilities such as `ln', `rm', `mv', and so on, need
- not be referred to through variables in this way, since users don't
- need to replace them with other programs.
-
- Each program-name variable should come with an options variable that
- is used to supply options to the program. Append `FLAGS' to the
- program-name variable name to get the options variable name--for
- example, `BISONFLAGS'. (The name `CFLAGS' is an exception to this
- rule, but we keep it because it is standard.) Use `CPPFLAGS' in any
- compilation command that runs the preprocessor, and use `LDFLAGS' in
- any compilation command that does linking as well as in any direct use
- of `ld'.
-
- If there are C compiler options that *must* be used for proper
- compilation of certain files, do not include them in `CFLAGS'. Users
- expect to be able to specify `CFLAGS' freely themselves. Instead,
- arrange to pass the necessary options to the C compiler independently
- of `CFLAGS', by writing them explicitly in the compilation commands or
- by defining an implicit rule, like this:
-
- CFLAGS = -g
- ALL_CFLAGS = -I. $(CFLAGS)
- .c.o:
- $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
-
- Do include the `-g' option in `CFLAGS', because that is not
- *required* for proper compilation. You can consider it a default that
- is only recommended. If the package is set up so that it is compiled
- with GCC by default, then you might as well include `-O' in the default
- value of `CFLAGS' as well.
-
- Put `CFLAGS' last in the compilation command, after other variables
- containing compiler options, so the user can use `CFLAGS' to override
- the others.
-
- Every Makefile should define the variable `INSTALL', which is the
- basic command for installing a file into the system.
-
- Every Makefile should also define variables `INSTALL_PROGRAM' and
- `INSTALL_DATA'. (The default for each of these should be
- `$(INSTALL)'.) Then it should use those variables as the commands for
- actual installation, for executables and nonexecutables respectively.
- Use these variables as follows:
-
- $(INSTALL_PROGRAM) foo $(bindir)/foo
- $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
-
- Always use a file name, not a directory name, as the second argument of
- the installation commands. Use a separate command for each file to be
- installed.
-
- File: make.info, Node: Directory Variables, 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:
-
- `prefix'
- A prefix used in constructing the default values of the variables
- listed below. The default value of `prefix' should be `/usr/local'
- (at least for now).
-
- `exec_prefix'
- A prefix used in constructing the default values of the some of the
- variables listed below. The default value of `exec_prefix' should
- be `$(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.
-
- `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'.
-
- `libdir'
- The directory for installing executable files to be run by the
- program rather than by users. Object files and libraries of
- object code should also go in this directory. The idea is that
- this directory is used for files that pertain to a specific
- machine architecture, but need not be in the path for commands.
- The value of `libdir' should normally be `/usr/local/lib', but
- write it as `$(exec_prefix)/lib'.
-
- `datadir'
- The directory for installing read-only data files which the
- programs refer to while they run. This directory is used for
- files which are independent of the type of machine being used.
- This should normally be `/usr/local/lib', but write it as
- `$(prefix)/lib'.
-
- `statedir'
- The directory for installing data files which the programs modify
- while they run. These files should be independent of the type of
- machine being used, and it should be possible to share them among
- machines at a network installation. This should normally be
- `/usr/local/lib', but write it as `$(prefix)/lib'.
-
- `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'.
-
- 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'.
-
- 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.
-
- The way to tell whether `foo.h' came from the Foo package is to put
- a magic string in the file--part of a comment--and grep for that
- string.
-
- `mandir'
- The directory for installing the man pages (if any) for this
- package. It should include the suffix for the proper section of
- the manual--usually `1' for a utility.
-
- `man1dir'
- The directory for installing section 1 man pages.
-
- `man2dir'
- The directory for installing section 2 man pages.
-
- `...'
- Use these names instead of `mandir' if the package needs to
- install man pages in more than one section of the manual.
-
- *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.
-
- `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'.
-
- `srcdir'
- The directory for the sources being compiled. The value of this
- variable is normally inserted by the `configure' shell script.
-
- 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.
- libdir = $(exec_prefix)/lib
- # 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: 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 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 `$?'.
-
- 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'
- `MFLAGS'
- 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 frtruncate
- # 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
-
-