1976 lines
41 KiB
Groff
1976 lines
41 KiB
Groff
. \" @(#)makefiles.4 1.7 09/04/11 Copyr 1996 J. Schilling
|
|
. \" User Manual page for makefile system
|
|
. \"
|
|
.if t .ds a \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'a
|
|
.if t .ds o \v'-0.55m'\h'0.00n'\z.\h'0.45n'\z.\v'0.55m'\h'-0.45n'o
|
|
.if t .ds u \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'u
|
|
.if t .ds A \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'A
|
|
.if t .ds O \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'O
|
|
.if t .ds U \v'-0.77m'\h'0.30n'\z.\h'0.45n'\z.\v'0.77m'\h'-.75n'U
|
|
.if t .ds s \(*b
|
|
.if t .ds S SS
|
|
.if n .ds a ae
|
|
.if n .ds o oe
|
|
.if n .ds u ue
|
|
.if n .ds s sz
|
|
.\".TH makefiles 4L "14. February 1997" "J\*org Schilling" "Schily\'s FILE FORMATS"
|
|
.TH makefiles 4L "14. February 1997" "J\*org Schilling" "GMD FOKUS FILE FORMATS"
|
|
.SH NAME
|
|
makefiles \- users guide for compiling projects on different platforms
|
|
.SH SYNOPSIS
|
|
.B "make [target]
|
|
.br
|
|
.B "gmake [target]
|
|
.br
|
|
.B "smake [target]
|
|
.br
|
|
.PP
|
|
Target may be one of:
|
|
.TP 10
|
|
\&.help
|
|
to get a list of possible targets and a short description.
|
|
.TP
|
|
all
|
|
to make the default targets
|
|
.TP
|
|
install
|
|
to make and install the default targets
|
|
(see
|
|
.IR INS_BASE " and " INS_KBASE
|
|
to learn how to modify the installation path).
|
|
.TP
|
|
ibins
|
|
to make and install a target in
|
|
.I SRCROOT/bins
|
|
.TP
|
|
depend
|
|
to re-make dependency rules for all default targets.
|
|
Note: All dependency files will automatically remade
|
|
on the next run of make before they are included.
|
|
.TP
|
|
clean
|
|
to remove
|
|
.I core
|
|
files and all intermediate object files.
|
|
.TP
|
|
clobber
|
|
to remove the targets from
|
|
.IR clean ,
|
|
all dependency files and all final targets
|
|
.TP
|
|
distclean
|
|
to remove the targets from
|
|
.IR clean " and " clobber
|
|
and all made files for all architectures.
|
|
.TP
|
|
tags
|
|
to make
|
|
.IR vi (1)
|
|
compatible tags
|
|
.TP
|
|
TAGS
|
|
to make
|
|
.IR emacs (1)
|
|
compatible tags
|
|
.TP
|
|
config
|
|
reserved for future use.
|
|
.TP
|
|
rmtarget
|
|
to remove the default target
|
|
.TP
|
|
relink
|
|
to remove the default target and remake it immediately. This can be
|
|
used to change .e.g LD_RUN_PATH in the executable.
|
|
|
|
.SH DESCRIPTION
|
|
Makefiles is a set of rules that allows compiling of structured
|
|
projects with small and uniformly structured makefiles.
|
|
All rules are located in a central directory.
|
|
Compiling the projects on different platforms can be done
|
|
simultaneously without
|
|
the need to modify any of the makefiles that are located
|
|
in the projects directories.
|
|
.PP
|
|
Makefiles is a set of high level portability tools superior to
|
|
.B autoconf
|
|
and easier to use.
|
|
.PP
|
|
Three make programs are supported:
|
|
.IR "Sunpro make" ,
|
|
.I "GNU make"
|
|
and
|
|
.IR smake .
|
|
.PP
|
|
.I BSDmake
|
|
could be supported if it supports pattern matching rules correctly.
|
|
.PP
|
|
The main design goal was to have a set of small and easy to read
|
|
makefiles, each located in the project's leaf directory and therefore
|
|
called
|
|
.IR leaf -makefile.
|
|
.PP
|
|
Each of these
|
|
.IR leaf -makefiles,
|
|
in fact contains no rule at all. It simply defines some macros
|
|
for the
|
|
.IR make -program
|
|
and includes two files from a central make rule depository.
|
|
The included files and the files that are recursively included
|
|
define the rules that are needed to compile the project.
|
|
.PP
|
|
Each
|
|
.IR leaf -makefile
|
|
is formed in a really simple way:
|
|
.TP
|
|
\(bu
|
|
It first defines two macros that define the relative location
|
|
of the project's root directory and the name of the directory
|
|
that contains the complete set of of rules and then includes
|
|
the rule file
|
|
.I rules.top
|
|
from the directory that forms the central rule depository.
|
|
You only have to edit the macro
|
|
.I SRCROOT
|
|
to reflect the relative location of the project's root directory.
|
|
.TP
|
|
\(bu
|
|
The next part of a
|
|
.IR leaf -makefile
|
|
defines macros that describe the target and the source.
|
|
You can only have one target per
|
|
.IR leaf -makefile.
|
|
Of course, there may be many source files, that are needed to create
|
|
that target.
|
|
If you want to make more than one target in a specific directory,
|
|
you have to put more than one makefile into that directory.
|
|
This is the part of a makefile that describes a unique target.
|
|
Edit this part to contain all source files, all local include files
|
|
and all non global compile time flags that are needed for your target.
|
|
For a typical target this is as simple as filling in a form.
|
|
.TP
|
|
\(bu
|
|
Each
|
|
.IR leaf -makefile
|
|
finally includes a file from the rules directory that contains
|
|
rules for the appropriate type of target that is to be made
|
|
from this
|
|
.IR leaf -makefile.
|
|
.PP
|
|
The makefile in each directory has to be called
|
|
.IR Makefile .
|
|
If you want to have more than one makefile in a specific directory,
|
|
you have to choose different names for the other makefiles.
|
|
.PP
|
|
There are rules for the following type of targets:
|
|
.TP 20
|
|
commands
|
|
The make rules for user level commands like
|
|
.IR cat ", " ls
|
|
etc. are located in the file
|
|
.I rules.cmd
|
|
.TP
|
|
drivers
|
|
The make rules for device drivers
|
|
are located in the file
|
|
.I rules.drv
|
|
.TP
|
|
libraries
|
|
The make rules for non shared libraries
|
|
are located in the file
|
|
.I rules.lib
|
|
.TP
|
|
shared libraries
|
|
The make rules for shared libraries
|
|
are located in the file
|
|
.I rules.shl
|
|
.TP
|
|
localized files
|
|
The make rules for localized files
|
|
are located in the file
|
|
.I rules.loc
|
|
.TP
|
|
nonlocalized files
|
|
The make rules for non localized files
|
|
are located in the file
|
|
.I rules.aux
|
|
.TP
|
|
shell scripts
|
|
The make rules for shell scripts (a variant of localized files)
|
|
are located in the file
|
|
.I rules.scr
|
|
.TP
|
|
manual pages
|
|
The make rules for manual pages (a variant of localized files)
|
|
are located in the file
|
|
.I rules.man
|
|
.TP
|
|
diverted makefiles
|
|
The make rules for projects that need to have more than
|
|
one makefile in a specific directory
|
|
are located in the file
|
|
.I rules.mks
|
|
It contains a rule that diverts to the listed sub makefiles.
|
|
Each sub makefile may be of any type.
|
|
.TP
|
|
directories
|
|
The make rules for sub directories
|
|
are located in the file
|
|
.I rules.dir
|
|
|
|
.SH "Macros/Variables Used In Rules
|
|
.PP
|
|
The following is a description of the most important macros
|
|
used within the make rules.
|
|
.I NOTE:
|
|
not all of them might be changed in a specific makefile.
|
|
Carefully read the description and change only those macros
|
|
that are intended to be used to change the behavior of
|
|
the compilation.
|
|
|
|
.TP 13
|
|
ARCHDIR
|
|
contains the location where object files and make targets will be placed.
|
|
A typical name would be:
|
|
.I "OBJ/sparc\-sunos5\-cc
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
ASFLAGS
|
|
The flags that are used with the assembler.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
ASMFILES
|
|
a list of assembler source files, to be specified in a
|
|
leaf makefile.
|
|
.
|
|
.TP
|
|
ASOPTS
|
|
The internal macro that contains the flags for the assembler.
|
|
Change this macro if you want to change the behavior.
|
|
Use:
|
|
.B "ASOPTS= value"
|
|
If you want to override the default value. If you want to
|
|
override the default assembler flags from the command line
|
|
call:
|
|
.B "make 'ASOPTS=value'"
|
|
Use:
|
|
.B "ASOPTS += value"
|
|
If you want to add flags to the default value from within a makefile.
|
|
.
|
|
.TP
|
|
ASOPTX
|
|
may be used if you want to add flags to the assembler flags from the
|
|
command line. Use:
|
|
.B "make 'ASOPTX=value'
|
|
.
|
|
.TP
|
|
C_ARCH
|
|
this macro contains the c-compiler architecture name.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
CCOM
|
|
This macro may be used from the command line to use a different
|
|
c-compiler than the default.
|
|
Use:
|
|
.B "make 'CCOM=gcc'
|
|
to use
|
|
.I gcc
|
|
for the next run.
|
|
Note: The value of
|
|
.I CCOM
|
|
must not necessarily be identical to the real name of the c-compiler.
|
|
It refers to a filename which contains the definition for that
|
|
c-compiler. This hint applies as well to all other macros that deal with
|
|
the name of the c-compiler.
|
|
The only macro, that contains the real invocation name of the c-compiler,
|
|
is
|
|
.IR CC .
|
|
.I CC
|
|
is set inside the machine dependent configuration file in the central
|
|
rules depository and must not be changed elsewhere.
|
|
.
|
|
.TP
|
|
CFILES
|
|
a list of C source files, to be specified in a
|
|
leaf makefile.
|
|
.
|
|
.TP
|
|
CFLAGS
|
|
The flags that are used with the c-compiler.
|
|
Do not use flags that belong to the c-preprocessor in the
|
|
.IR COPTOPT ", " COPTS " and " COPTX
|
|
macros.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
CLEAN_FILES
|
|
A list of files ( besides the object files ) that will be
|
|
removed with
|
|
.IR "make clean" .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
CLEAN_FILEX
|
|
this macro may be used to define additional files that should
|
|
be removed with
|
|
.IR "make clean" .
|
|
.
|
|
.TP
|
|
CLOBBER_FILEX
|
|
this macro may be used to define additional files that should
|
|
be removed with
|
|
.IR "make clobber" .
|
|
.
|
|
.TP
|
|
COPTOPT
|
|
The c-compiler optimization flag. This flag is intended to
|
|
be overridden either from a makefile or from command line.
|
|
.
|
|
.TP
|
|
COPTS
|
|
The internal macro that contains the flags for the c-compiler.
|
|
Change this macro if you want to change the behavior.
|
|
Use:
|
|
.B "COPTS= value"
|
|
If you want to override the default value. If you want to
|
|
override the default c-compiler flags from the command line
|
|
call:
|
|
.B "make 'COPTS=value'"
|
|
Use:
|
|
.B "COPTS += value"
|
|
If you want to add flags to the default value from within a makefile.
|
|
.
|
|
.TP
|
|
COPTX
|
|
may be used if you want to add flags to the c-compiler flags from the
|
|
command line. Use:
|
|
.B "make 'COPTX=value'
|
|
.
|
|
.TP
|
|
CPPFLAGS
|
|
The flags that are used with the c-preprocessor.
|
|
This macro as well as:
|
|
.IR CPPOPTS " and " CPPOPTX
|
|
are also used when compiling c-programs.
|
|
They should contain only the following flags:
|
|
.IR "\-Dname=value ", " \-Uname " , "
|
|
.IR \-Idirectory " and " \-Ydirectory .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
CPPOPTS
|
|
The internal macro that contains the flags for the c-preprocessor.
|
|
Change this macro if you want to change the behavior.
|
|
Use:
|
|
.B "CPPOPTS= value"
|
|
If you want to override the default value. If you want to
|
|
override the default c-preprocessor flags from the command line
|
|
call:
|
|
.B "make 'CPPOPTS=value'"
|
|
Use:
|
|
.B "CPPOPTS += value"
|
|
If you want to add flags to the default value from within a makefile.
|
|
.
|
|
.TP
|
|
CPPOPTX
|
|
may be used if you want to add flags to the c-preprocessor flags from the
|
|
command line. Use:
|
|
.B "make 'CPPOPTX=value'
|
|
.
|
|
.TP
|
|
CURDIR
|
|
This macro contains the name of the sub directory that is currently processed.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
CWARNOPTS
|
|
This macro may be set in
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH)
|
|
to overwrite the default c-compiler warn options.
|
|
.
|
|
.TP
|
|
CWOPTS
|
|
This macro is set inside the machine dependent configuration file in the central
|
|
rules depository and must not be changed elsewhere.
|
|
It contains the flags that set the default warning level for the c-compiler.
|
|
.
|
|
.TP
|
|
DEFINSGRP
|
|
this macro may be set in the projects defaults file to set up the
|
|
default group id for installation
|
|
.TP
|
|
DEFINSMODE
|
|
this macro may be set in the projects defaults file to set up the
|
|
default file permission for installation
|
|
.TP
|
|
DEFINSUSR
|
|
this macro may be set in the projects defaults file to set up the
|
|
default user id for installation
|
|
.TP
|
|
DEFUMASK
|
|
this macro may be set in the projects defaults file to set up the
|
|
default
|
|
.I umask
|
|
value for creating sub directories
|
|
.
|
|
.TP
|
|
DEFAULTSDIR
|
|
this macro may be set from command line or from the shell environment
|
|
if the user wants to use a different set of
|
|
.I Defaults
|
|
files that is not located in the directory
|
|
.B DEFAULTS
|
|
in the source root directory.
|
|
This may be used to hold two or more set of defaults that differ e.g. in the
|
|
installation path or the C-compiler.
|
|
.
|
|
.TP
|
|
DEFAULTSROOT
|
|
this macro may be set in a leaf makefile, if that makefile wants to use
|
|
a
|
|
.I Defaults
|
|
file that is not located in
|
|
.I $(DEFAULTSDIR)
|
|
in the source root.
|
|
This may be used, if a sub tree in a big project needs a different setup.
|
|
.
|
|
.TP
|
|
DEFLTSDIR
|
|
This is an internally used macro that is set from
|
|
.I $(DEFAULTSDIR)
|
|
or from the internal defaults.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
DEFLTSROOT
|
|
This is an internally used macro that is set from
|
|
.I $(DEFAULTSROOT)
|
|
or from the internal defaults.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
DEFCCOM
|
|
the default name of the c-compiler. This is usually set in the file
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) .
|
|
.
|
|
.TP
|
|
DEFINCDIRS
|
|
a list of directories that are searched by default in addition to
|
|
the system include directories. If this macro is not set,
|
|
.I $(SRCROOT)/include
|
|
is used.
|
|
.
|
|
.TP
|
|
DIRNAME
|
|
this macro needs to be set in the makefile that is located in
|
|
the
|
|
.I "$(SRCROOT)
|
|
directory.
|
|
The value should be either set to the name of the directory
|
|
where the makefile is located or to
|
|
.BR SRCROOT .
|
|
The value of this macro is updated automatically
|
|
to follow the directory hierarchy.
|
|
Do not change this macro in a make file other than the make file
|
|
in the source root.
|
|
.
|
|
.TP
|
|
DIRS
|
|
this macro needs to be set in a makefile that is located in
|
|
a directory that contains diversion directories.
|
|
It must contain a list of directory names where the diversions
|
|
go to e.g.
|
|
.BR "DIRS= libfoo libbar libgarbage" .
|
|
.
|
|
.TP
|
|
HFILES
|
|
for normal operation,
|
|
.I makefiles
|
|
will automatically find which include files are needed
|
|
for compilation.
|
|
However, if you want to create a tag file that includes
|
|
tags for definitions that occur within include files,
|
|
you should set
|
|
.I HFILES
|
|
to be a list of include files containing such definitions.
|
|
.
|
|
.TP
|
|
INCDIRS
|
|
this macro will normally be a copy from
|
|
.IR DEFINCDIRS .
|
|
You may however specify a different value in a leaf makefile
|
|
or from command line. This will overwrite the defaults value.
|
|
.
|
|
.TP
|
|
INS_BASE
|
|
this macro has to be specified in the file
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) .
|
|
It must contain the path name of the root for installing
|
|
general targets of the project.
|
|
See
|
|
.IR INSDIR .
|
|
.
|
|
.TP
|
|
INS_KBASE
|
|
this macro has to be specified in the file
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) .
|
|
It must contain the path name of the root for installing
|
|
kernel modules from the project.
|
|
See
|
|
.IR INSDIR .
|
|
.
|
|
.TP
|
|
INSDIR
|
|
this macro has to be specified in the leaf makefile.
|
|
It must contain the path name of a directory relative to
|
|
.IR INS_BASE " or " INS_KBASE .
|
|
The target will be installed into
|
|
.I "$(INS_BASE)/$(INSDIR)" .
|
|
.
|
|
.TP
|
|
INSGRP
|
|
this macro may be set in a leaf makefile to set up the
|
|
group id for installation
|
|
.TP
|
|
INSMODE
|
|
this macro may be set in a leaf makefile to set up the
|
|
file permission for installation
|
|
.TP
|
|
INSUSR
|
|
this macro may be set in a leaf makefile to set up the
|
|
user id for installation
|
|
.
|
|
.TP
|
|
K_ARCH
|
|
this macro contains the kernel/machine architecture for the
|
|
target machine (e.g.
|
|
.IR "sun3 sun4c sun4m sun4u 9000\-725 aviion" ).
|
|
It is set to the output of
|
|
.I "uname \-m
|
|
converted to lower case.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
KARCH
|
|
this macro contains the kernel/machine architecture for the
|
|
target machine (e.g.
|
|
.IR "sun3 sun4c sun4m sun4u 9000\-725 aviion" ).
|
|
It is set to the output of
|
|
.I "uname \-m
|
|
converted to lower case.
|
|
.br
|
|
Do not change this macro unless you want to do a cross compilation.
|
|
.
|
|
.TP
|
|
LDFLAGS
|
|
The flags that are used with the linker.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
LDLIBS
|
|
The internal macro that holds the
|
|
libraries that are used while linking the target.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
LDOPTS
|
|
The internal macro that contains the flags for the linker.
|
|
Change this macro if you want to change the behavior.
|
|
Use:
|
|
.B "LDOPTS= value"
|
|
If you want to override the default value. If you want to
|
|
override the default linker flags from the command line
|
|
call:
|
|
.B "make 'LDOPTS=value'"
|
|
Use:
|
|
.B "LDOPTS += value"
|
|
If you want to add flags to the default value from within a makefile.
|
|
.
|
|
.TP
|
|
LDOPTX
|
|
may be used if you want to add flags to the linker flags from the
|
|
command line. Use:
|
|
.B "make 'LDOPTX=value'
|
|
.
|
|
.TP
|
|
LDPATH
|
|
the default library search path for the linker.
|
|
This is usually set in the file
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) .
|
|
.
|
|
.TP
|
|
LIB_KVM
|
|
a predefined macro that contains the operating system dependent
|
|
name of a library
|
|
that is needed by programs that read/write kernel virtual memory.
|
|
Add
|
|
.I "$(LIB_KVM)
|
|
to your list of libraries (e.g.
|
|
.BR "LIBS= \-lintl $(LIB_KVM)" ),
|
|
if your target uses kvm.
|
|
.
|
|
.TP
|
|
LIB_MATH
|
|
a predefined macro that contains the operating system dependent
|
|
name of a library
|
|
that is needed by programs that use routines of the math library.
|
|
Add
|
|
.I "$(LIB_MATH)
|
|
to your list of libraries (e.g.
|
|
.BR "LIBS= \-lintl $(LIB_MATH)" ),
|
|
if your target uses math subroutines.
|
|
.
|
|
.TP
|
|
LIB_SOCKET
|
|
a predefined macro that contains the operating system dependent
|
|
name of a library
|
|
that is needed by programs that use socket calls.
|
|
Add
|
|
.I "$(LIB_SOCKET)
|
|
to your list of libraries (e.g.
|
|
.BR "LIBS= \-lintl $(LIB_SOCKET)" ),
|
|
if your target uses sockets. Note: this should (for portability reasons)
|
|
even be done on systems that don't require a socket library because
|
|
they have the socket interface inside libc.
|
|
.
|
|
.TP
|
|
LIBS_PATH
|
|
this macro contains the path to a directory where those
|
|
libraries are located, that have been build during
|
|
a make run inside the current project.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
M_ARCH
|
|
this macro contains the machine architecture for the
|
|
target machine (e.g.
|
|
.IR "sun3 sun4 ip22 i86pc i586 9000\-725 aviion" ).
|
|
It is set to the output of
|
|
.I "arch
|
|
converted to lower case.
|
|
On systems, where
|
|
.I M_ARCH
|
|
is not available, it is set to the content of
|
|
.IR K_ARCH .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MK_FILES
|
|
makefiles that divert into sub makes within the same directory
|
|
must set
|
|
.I MK_FILES
|
|
to be a list of makefile names for the sub makes.
|
|
Makefile names for sub makes should have a name that is build
|
|
by adding
|
|
.I .mk
|
|
to the base name of the target that is defined inside the
|
|
specific makefile.
|
|
.
|
|
.TP
|
|
MAKEPROG
|
|
Set this macro to the name of your make program if it does
|
|
not support the macro
|
|
.IR MAKE_NAME .
|
|
The make program
|
|
.I smake
|
|
is able to identify itself.
|
|
If you want to use a make program that is not able
|
|
to identify itself
|
|
and it's name is not
|
|
.IR make ,
|
|
set
|
|
.I MAKEPROG
|
|
to the name of the make program.
|
|
Currently only
|
|
.I gmake
|
|
is supported as alternate value for
|
|
.IR MAKEPROG .
|
|
If you want to use an unsupported make program
|
|
you have to check if it supports the needed features
|
|
for
|
|
.IR makefiles .
|
|
You must write your own rule files for that make program.
|
|
If you want to use
|
|
.IR gmake ,
|
|
you should do
|
|
.B "setenv MAKEPROG gmake
|
|
before you start
|
|
.I gmake
|
|
or use a shell script that does this job for you.
|
|
.
|
|
.TP
|
|
MAKE
|
|
This macro is set up by the
|
|
.I make
|
|
program.
|
|
It contains a path name that is sufficient to recursively
|
|
call the same
|
|
.I make
|
|
program again (either that last path component or the full path
|
|
name of the make program).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKEFLAGS
|
|
This macro is set up by the
|
|
.I make
|
|
program.
|
|
It contains the command line flags,
|
|
.I make
|
|
is called with.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_ARCH
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the processor architecture of the target machine
|
|
(e.g. mc68020, sparc, pentium).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_BRAND
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the brand of the target machine
|
|
(e.g. Sun_Microsystems(e.g. ).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_HOST
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the host name of the target machine
|
|
(e.g. duffy, sherwood, ghost).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_MACH
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the kernel architecture of the target machine
|
|
(e.g. sun3, sun4c, sun4m, sun4u).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_MODEL
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the model name of the target machine
|
|
(e.g. SUNW,SPARCstation-20).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_M_ARCH
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the machine architecture of the target machine
|
|
(e.g. sun3, sun4).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_NAME
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the official name of the
|
|
make program
|
|
(e.g. make, smake, gmake).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_OS
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the operating system name of the target machine
|
|
(e.g. sunos, linux, dgux).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_OSDEFS
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains operating system specific defines for the compiler
|
|
(e.g. \-D__SVR4).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_OSREL
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the operating system release name of the target machine
|
|
(e.g. 5.5, 4.1.1).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_OSVERSION
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the operating system version of the target machine
|
|
(e.g. generic).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MAKE_SERIAL
|
|
This macro is currently set up by
|
|
.B smake
|
|
only.
|
|
It contains the serial number of the target machine
|
|
(e.g. 1920098175).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
MANDIR
|
|
all makefiles for manual pages must set this macro to the
|
|
path name relative to
|
|
.I INS_BASE
|
|
where the manual page root dir for the project should be.
|
|
Possible values for english manual pages are
|
|
.IR man " or " share/man ,
|
|
possible values for german manual pages are
|
|
.IR man/de " or " share/man/de .
|
|
.
|
|
.TP
|
|
MANFILE
|
|
makefiles for manual pages set this macro to the name of the
|
|
troff source file for the manual page
|
|
.
|
|
.TP
|
|
MANSECT
|
|
makefiles for manual pages set this macro to the macro name that
|
|
contains the real section name for this manual page. This is
|
|
necessary because bsd based system have different naming conventions than
|
|
system V based systems. See below for a valid list of manual section
|
|
macros.
|
|
.TP
|
|
MANSECT_ADMIN
|
|
This macro contains the name of the sub directory for administrative
|
|
commands and maintenance procedures.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_CMD
|
|
This macro contains the name of the sub directory for general
|
|
user commands.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_DEMOS
|
|
This macro contains the name of the sub directory for demo
|
|
commands.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_DEVICE
|
|
This macro contains the name of the sub directory for
|
|
user level device interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_DRIVER
|
|
This macro contains the name of the sub directory for
|
|
kernel level device driver interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_FILEFORM
|
|
This macro contains the name of the sub directory for
|
|
file formats.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_GAMES
|
|
This macro contains the name of the sub directory for
|
|
games.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_HDR
|
|
This macro contains the name of the sub directory for
|
|
header files.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_LIB
|
|
This macro contains the name of the sub directory for
|
|
library function interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_MACROS
|
|
This macro contains the name of the sub directory for
|
|
troff macros.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_NETWORK
|
|
This macro contains the name of the sub directory for
|
|
user level network interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_SYSCALL
|
|
This macro contains the name of the sub directory for
|
|
system call interfaces.
|
|
Do not change this macro.
|
|
.TP
|
|
MANSECT_TABLES
|
|
This macro contains the name of the sub directory for
|
|
tables.
|
|
Do not change this macro.
|
|
.TP
|
|
MANSTYLE
|
|
This macro contains the name that is used to find the right
|
|
ordering conventions for manual pages.
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFFIX
|
|
makefiles for manual pages set this macro to the macro name that
|
|
contains the real suffix for this manual page. This is
|
|
necessary because bsd based system have different naming conventions than
|
|
system V based systems. See below for a valid list of manual suffix
|
|
macros.
|
|
.TP
|
|
MANSUFF_ADMIN
|
|
This macro contains the name of the file suffix for administrative
|
|
commands and maintenance procedures.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_CMD
|
|
This macro contains the name of the file suffix for general
|
|
user commands.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_DEMOS
|
|
This macro contains the name of the file suffix for demo
|
|
commands.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_DEVICE
|
|
This macro contains the name of the file suffix for
|
|
user level device interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_DRIVER
|
|
This macro contains the name of the file suffix for
|
|
kernel level device driver interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_FILEFORM
|
|
This macro contains the name of the file suffix for
|
|
file formats.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_GAMES
|
|
This macro contains the name of the file suffix for
|
|
games.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_HDR
|
|
This macro contains the name of the file suffix for
|
|
header files.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_LIB
|
|
This macro contains the name of the file suffix for
|
|
library function interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_MACROS
|
|
This macro contains the name of the file suffix for
|
|
troff macros.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_NETWORK
|
|
This macro contains the name of the file suffix for
|
|
user level network interfaces.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_SYSCALL
|
|
This macro contains the name of the file suffix for
|
|
system call interfaces.
|
|
Do not change this macro.
|
|
.TP
|
|
MANSUFF_TABLES
|
|
This macro contains the name of the file suffix for
|
|
tables.
|
|
Do not change this macro.
|
|
.TP
|
|
MARCH
|
|
this macro contains the machine architecture for the
|
|
target machine (e.g.
|
|
.IR "sun3 sun4 ip22 i86pc i586 9000\-725 aviion" ).
|
|
It is set to the output of
|
|
.I "arch
|
|
converted to lower case.
|
|
On systems, where
|
|
.I M_ARCH
|
|
is not available, it is set to the content of
|
|
.IR K_ARCH .
|
|
.br
|
|
Do not change this macro unless you want to do a cross compilation.
|
|
.
|
|
.TP
|
|
O_ARCH
|
|
this macro contains the name of the operating system
|
|
converted to lower case.
|
|
It is usually the output of:
|
|
.IR "uname \-s" .
|
|
It may contain a modified name if the compilation rules
|
|
for different version of the operating system differ (e.g.
|
|
on
|
|
.IR SunOS " and " Solaris ,
|
|
the official operation system name in both cases is
|
|
.IR SunOS ).
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OARCH
|
|
this macro contains the object architecture that is used
|
|
for architecture dependent sub directories.
|
|
It is set to:
|
|
.IR "$(PARCH)\-$(O_ARCH)\-$(C_ARCH)" .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OARCHDIR
|
|
this macro contains the concatenation of
|
|
.I OBJ/
|
|
and
|
|
.IR "$(OARCH)" .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OFILES
|
|
this macro contains the list of objects that are the
|
|
the dependency list for the target.
|
|
It is constructed from the list of
|
|
assembler source files,
|
|
c source files,
|
|
lex source files and
|
|
yacc source files.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OINCSDIR
|
|
this macro contains the concatenation of
|
|
.I $(SRCROOT)/incs/
|
|
and
|
|
.IR "$(OARCH)" .
|
|
It is the location where include files that are made within a make run
|
|
and subject to global use will be placed.
|
|
.br
|
|
Do not change this macro.
|
|
.TP
|
|
OLIBSDIR
|
|
this macro contains the concatenation of
|
|
.I $(SRCROOT)/libs/
|
|
and
|
|
.IR "$(OARCH)" .
|
|
It is the location where libraries that are made within a make run
|
|
will be placed.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OSDEFS
|
|
this macro contains operating system specific c-preprocessor
|
|
definitions.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OSNAME
|
|
the unmodified name of the operating system converted to lower case.
|
|
See
|
|
.IR O_ARCH .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
OSREL
|
|
the release of the operating system.
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
P_ARCH
|
|
this macro contains the processor architecture for the
|
|
target machine (e.g.
|
|
.IR "mc68020 mc88200 sparc pentium" ).
|
|
It is set to the output of
|
|
.I "uname \-p
|
|
converted to lower case.
|
|
On systems, where
|
|
.I P_ARCH
|
|
is not available, it is set to the content of
|
|
.IR K_ARCH .
|
|
.br
|
|
Do not change this macro.
|
|
.
|
|
.TP
|
|
PARCH
|
|
this macro contains the processor architecture for the
|
|
target machine (e.g.
|
|
.IR "mc68020 mc88200 sparc pentium" ).
|
|
It is set to the output of
|
|
.I "uname \-p
|
|
converted to lower case.
|
|
On systems, where
|
|
.I P_ARCH
|
|
is not available, it is set to the content of
|
|
.IR K_ARCH .
|
|
.br
|
|
Do not change this macro unless you want to do a cross compilation.
|
|
.
|
|
.TP
|
|
RULESDIR
|
|
the value of this macro must be set before
|
|
the rules file
|
|
.I "$(SRCROOT)/$(RULESDIR/rules.top
|
|
is included.
|
|
If you want to test the behavior of a modified version
|
|
of the
|
|
.I makefiles
|
|
in
|
|
.IR RULESDIR ,
|
|
put a copy into an alternate directory, modify one or more
|
|
files in it and then use make with a different value of
|
|
.IR RULESDIR ,
|
|
that points to the alternate directory.
|
|
.
|
|
.TP
|
|
RUNPATH
|
|
is evaluated on systems, where
|
|
.I LD_RUN_PATH
|
|
is supported.
|
|
It contains the default library search path for dynamic linked targets
|
|
on runtime.
|
|
This search path will be stored inside the target.
|
|
This is usually set in the file
|
|
.I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults
|
|
or
|
|
.IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) .
|
|
Note that older systems will use
|
|
.I LD_LIBRARY_PATH
|
|
for this purpose too.
|
|
.
|
|
.TP
|
|
SCRFILE
|
|
this macro must be set in a leaf makefile for shell scripts to define
|
|
the source for that script file.
|
|
.
|
|
.TP
|
|
SRCFILE
|
|
this macro must be set in a leaf makefile for localized files to define
|
|
the source for that file.
|
|
.
|
|
.TP
|
|
SRCROOT
|
|
this macro contains the relative position to the project's
|
|
source root directory.
|
|
The value of this macro must be set before
|
|
the rules file
|
|
.I "$(SRCROOT)/$(RULESDIR/rules.top
|
|
is included.
|
|
.I SRCROOT
|
|
should be set to
|
|
.I ../..
|
|
if the appropriate leaf makefile is located two directory
|
|
levels below the source route.
|
|
.
|
|
.TP
|
|
SUBARCHDIR
|
|
may be set to put the object files and the target into
|
|
a different directory than usual.
|
|
.I SUBARCHDIR
|
|
will modify the value of
|
|
.IR ARCHDIR .
|
|
If you want to make a target that is compiled for
|
|
.I dbx
|
|
you may use:
|
|
.IR "make COPTX=\-g SUBARCHDIR=\-dbx" .
|
|
.
|
|
.TP
|
|
TARGET
|
|
all makefiles, that are not referring to library targets or
|
|
sub makes / sub dir makes,
|
|
must define
|
|
.I TARGET
|
|
to be the output file name of the final link operation.
|
|
.
|
|
.TP
|
|
TARGETLIB
|
|
all makefiles that are used to make libraries
|
|
must define
|
|
.I TARGETLIB
|
|
to be the central part of the target library.
|
|
If you want to make e.g.
|
|
.I libfoo
|
|
define
|
|
.IR "TARGETLIB= foo" .
|
|
This is needed to allow operating systems to have different naming
|
|
conventions for libraries.
|
|
If you are making a non shared library, the example above
|
|
would result in a filename:
|
|
.I libfoo.a
|
|
for the real target.
|
|
.
|
|
.TP
|
|
TARGETMAN
|
|
this macro must be set in a leaf makefile for manual pages to define
|
|
the base name for that manual page (not including the suffix).
|
|
.
|
|
.TP
|
|
XMK_FILE
|
|
makefiles that want to install manual pages should set
|
|
.I XMK_FILE
|
|
to
|
|
.B Makefile.man
|
|
to avoid having to install a diversion make file.
|
|
The make file found in
|
|
.I XMK_FILE
|
|
will be processed only if
|
|
.I make
|
|
is called with the target
|
|
.IR install .
|
|
|
|
.SH "GETTING STARTED
|
|
.PP
|
|
To set up a new project, first copy the
|
|
.IR RULES " and " TEMPLATES
|
|
directories and all its content into the project's root directory.
|
|
.PP
|
|
Then copy a top level makefile, a
|
|
.I Defaults
|
|
file and a
|
|
.I Targetdirs.archname
|
|
file into the project's root directory.
|
|
.PP
|
|
Then create the following directories:
|
|
.IR cmd ", " lib ", " include .
|
|
.PP
|
|
Now start creating target directories e.g below
|
|
.IR cmd " and " lib .
|
|
Don't forget to create a makefile and an appropriate
|
|
.I Targetdirs.archname
|
|
file on each node directory.
|
|
|
|
.SH EXAMPLES
|
|
.PP
|
|
If you want to set up a private copy of parts of a project,
|
|
you should choose a directory inside your directory tree that will become
|
|
the shadow projects source root directory.
|
|
Then create symbolic links named
|
|
.IR RULES " and " TEMPLATES
|
|
to the real source root.
|
|
If you don't want to modify the global include files,
|
|
create a symbolic link to the
|
|
.I include
|
|
directory too, else copy the include directory and its content.
|
|
copy the top level makefile, the
|
|
.I Defaults
|
|
file and the
|
|
.I Targetdirs.archname
|
|
file.
|
|
.PP
|
|
Finally copy the desired sub tree together with all
|
|
makefiles and the
|
|
.I Targetdirs.archname
|
|
files that are located in the directories above
|
|
your part of the project that you want to have separately.
|
|
|
|
.SH FILES
|
|
\&.\|.\|./RULES/*
|
|
.br
|
|
\&.\|.\|./DEFAULTS/*
|
|
.br
|
|
\&.\|.\|./TARGETS/*
|
|
.br
|
|
\&.\|.\|./TEMPLATES/*
|
|
|
|
.SH "SEE ALSO"
|
|
.BR makerules (4),
|
|
.BR make (1),
|
|
.BR gmake (1),
|
|
.BR smake (1).
|
|
.PP
|
|
If you want to know, how to add new rules or how to add support
|
|
for new operating systems or compilers look into
|
|
.BR makerules (4).
|
|
|
|
.SH DIAGNOSTICS
|
|
Diagnostic messages depend on the make program.
|
|
Have a look at the appropriate man page.
|
|
|
|
.SH NOTES
|
|
The scope of this manual is only the usage of
|
|
.BR "leaf makefiles" .
|
|
If you want to make changes to the
|
|
.B make rules
|
|
have a look at
|
|
.BR makerules (4).
|
|
.PP
|
|
.I makefiles
|
|
can be used with
|
|
.IR "Sunpro make" ", " "Gnu make"
|
|
and
|
|
.IR smake .
|
|
Although Gnu make runs on many platforms, it has no useful debug
|
|
output.
|
|
.PP
|
|
Use
|
|
.IR "Sunpro make" " or " "smake"
|
|
if you have problems with a makefile.
|
|
.IR "Sunpro make" " and " "smake" ,
|
|
both have a \-D flag, that allows you to watch the makefiles
|
|
after the first expansion. Use this option, if you are in doubt
|
|
if your makefile gets expanded the right way and if the right
|
|
rules are included.
|
|
There is also a \-d option that gives debugging output while
|
|
make is running. If you want more output, use \-dd, \-ddd and so on.
|
|
.PP
|
|
.I Smake
|
|
has an option \-xM that shows you the include dependency for
|
|
make rules.
|
|
|
|
.PP
|
|
.ne 20
|
|
The following is a list of all macros that are used in
|
|
.IR makefiles .
|
|
Do not use them unless their meaning has been explained
|
|
before.
|
|
.PP
|
|
|
|
.BR \-O_ARCH ,
|
|
.BR .OBJDIR ,
|
|
.BR .SEARCHLIST ,
|
|
.BR ALLTARGETS ,
|
|
.BR AR ,
|
|
.BR ARCH ,
|
|
.BR ARCHDIR ,
|
|
.BR ARCHDIRX ,
|
|
.BR ARCH_DONE ,
|
|
.BR ARFLAGS ,
|
|
.BR AS ,
|
|
.BR ASFLAGS ,
|
|
.BR ASMFILES ,
|
|
.BR ASOPTS ,
|
|
.BR ASOPTX ,
|
|
.BR CC ,
|
|
.BR CCOM ,
|
|
.BR CCOM_DEF ,
|
|
.BR CFILES ,
|
|
.BR CFLAGS ,
|
|
.BR CHGRP ,
|
|
.BR CHMOD ,
|
|
.BR CHOWN ,
|
|
.BR CLEAN_FILES ,
|
|
.BR CLEAN_FILEX ,
|
|
.BR CLOBBER_FILEX ,
|
|
.BR COPTDYN ,
|
|
.BR COPTGPROF ,
|
|
.BR COPTOPT ,
|
|
.BR COPTS ,
|
|
.BR COPTX ,
|
|
.BR CPP ,
|
|
.BR CPPFLAGS ,
|
|
.BR CPPOPTS ,
|
|
.BR CPPOPTX ,
|
|
.BR CTAGS ,
|
|
.BR CURDIR ,
|
|
.BR CWARNOPTS ,
|
|
.BR CWOPTS ,
|
|
.BR C_ARCH ,
|
|
.BR DEFAULTSDIR ,
|
|
.BR DEFAULTSROOT ,
|
|
.BR DEFCCOM ,
|
|
.BR DEFCCOM_DEF ,
|
|
.BR DEFINCDIRS ,
|
|
.BR DEFINCDIRS_DEF ,
|
|
.BR DEFINSGRP ,
|
|
.BR DEFINSMODE ,
|
|
.BR DEFINSUSR ,
|
|
.BR DEFUMASK ,
|
|
.BR DEF_ROOT ,
|
|
.BR DEP_DEP ,
|
|
.BR DEP_FILE ,
|
|
.BR DEP_SUFFIX ,
|
|
.BR DIRNAME ,
|
|
.BR DIRS ,
|
|
.BR DYNLD ,
|
|
.BR ETAGS ,
|
|
.BR FLOAT_OPTIONS ,
|
|
.BR HFILES ,
|
|
.BR HOSTNAME ,
|
|
.BR INCDIRS ,
|
|
.BR INSDIR ,
|
|
.BR INSGRP ,
|
|
.BR INSGRP_DEF ,
|
|
.BR INSMODE ,
|
|
.BR INSMODE_DEF ,
|
|
.BR INSTALL ,
|
|
.BR INSUSR ,
|
|
.BR INSUSR_DEF ,
|
|
.BR INS_BASE ,
|
|
.BR INS_KBASE ,
|
|
.BR KARCH ,
|
|
.BR KARCH_DEF ,
|
|
.BR KDEFINES ,
|
|
.BR K_ARCH ,
|
|
.BR LD ,
|
|
.BR LDCC ,
|
|
.BR LDFLAGS ,
|
|
.BR LDLIBS ,
|
|
.BR LDOPTDYN ,
|
|
.BR LDOPTS ,
|
|
.BR LDOPTX ,
|
|
.BR LDPATH ,
|
|
.BR LIBS ,
|
|
.BR LIBS_PATH ,
|
|
.BR LIBX ,
|
|
.BR LIB_KVM ,
|
|
.BR LIB_MATH ,
|
|
.BR LIB_PREFIX ,
|
|
.BR LIB_SOCKET ,
|
|
.BR LIB_SUFFIX ,
|
|
.BR LN ,
|
|
.BR LNDYNLIB ,
|
|
.BR LOCALIZE ,
|
|
.BR LORDER ,
|
|
.BR MAKE ,
|
|
.BR MK_FILES ,
|
|
.BR MAKEPROG ,
|
|
.BR MAKE_ARCH ,
|
|
.BR MAKE_HOST ,
|
|
.BR MAKE_MACH ,
|
|
.BR MAKE_M_ARCH ,
|
|
.BR MAKE_NAME ,
|
|
.BR MAKE_OS ,
|
|
.BR MAKE_OSDEFS ,
|
|
.BR MAKE_OSREL ,
|
|
.BR MANDIR ,
|
|
.BR MANFILE ,
|
|
.BR MANSECT ,
|
|
.BR MANSECT_ADMIN ,
|
|
.BR MANSECT_CMD ,
|
|
.BR MANSECT_DEMOS ,
|
|
.BR MANSECT_DEVICE ,
|
|
.BR MANSECT_DRIVER ,
|
|
.BR MANSECT_FILEFORM ,
|
|
.BR MANSECT_GAMES ,
|
|
.BR MANSECT_HDR ,
|
|
.BR MANSECT_LIB ,
|
|
.BR MANSECT_MACROS ,
|
|
.BR MANSECT_NETWORK ,
|
|
.BR MANSECT_SYSCALL ,
|
|
.BR MANSECT_TABLES ,
|
|
.BR MANSTYLE ,
|
|
.BR MANSUFFIX ,
|
|
.BR MANSUFF_ADMIN ,
|
|
.BR MANSUFF_CMD ,
|
|
.BR MANSUFF_DEMOS ,
|
|
.BR MANSUFF_DEVICE ,
|
|
.BR MANSUFF_DRIVER ,
|
|
.BR MANSUFF_FILEFORM ,
|
|
.BR MANSUFF_GAMES ,
|
|
.BR MANSUFF_HDR ,
|
|
.BR MANSUFF_LIB ,
|
|
.BR MANSUFF_MACROS ,
|
|
.BR MANSUFF_NETWORK ,
|
|
.BR MANSUFF_SYSCALL ,
|
|
.BR MANSUFF_TABLES ,
|
|
.BR MARCH ,
|
|
.BR MARCH_DEF ,
|
|
.BR MKDEP ,
|
|
.BR MKDEP_OUT ,
|
|
.BR MKDIR ,
|
|
.BR MV ,
|
|
.BR M_ARCH ,
|
|
.BR OARCH ,
|
|
.BR OARCHDIR ,
|
|
.BR OFILES ,
|
|
.BR OINCSDIR ,
|
|
.BR OLIBSDIR ,
|
|
.BR OSDEFS ,
|
|
.BR OSNAME ,
|
|
.BR OSREL ,
|
|
.BR O_ARCH ,
|
|
.BR PALLDEP_FILE ,
|
|
.BR PARCH ,
|
|
.BR PARCH_DEF ,
|
|
.BR PASMFILES ,
|
|
.BR PDEP_FILE ,
|
|
.BR PLOFILES ,
|
|
.BR POFILES ,
|
|
.BR PTARGET ,
|
|
.BR PTARGET_BASE ,
|
|
.BR PYOFILES ,
|
|
.BR P_ARCH ,
|
|
.BR RANLIB ,
|
|
.BR RM ,
|
|
.BR RMDEP ,
|
|
.BR RMTARGET ,
|
|
.BR RM_FORCE ,
|
|
.BR RM_RECURS ,
|
|
.BR RM_RF ,
|
|
.BR RULESDIR ,
|
|
.BR RUNPATH ,
|
|
.BR SCRFILE ,
|
|
.BR SHELL ,
|
|
.BR SHL_SUFFIX ,
|
|
.BR SRCFILE ,
|
|
.BR SRCLIBS ,
|
|
.BR SRCROOT ,
|
|
.BR SUBARCH ,
|
|
.BR SUBARCHDIR ,
|
|
.BR SYMLINK ,
|
|
.BR TAGS ,
|
|
.BR TARGET ,
|
|
.BR TARGETLIB ,
|
|
.BR TARGETMAN ,
|
|
.BR TARGET_BASE ,
|
|
.BR TARGET_PATH ,
|
|
.BR TSORT ,
|
|
.BR UMASK ,
|
|
.BR UMASK_DEF ,
|
|
.BR UMASK_VAL ,
|
|
.BR XARCH ,
|
|
.BR XK_ARCH ,
|
|
.BR XMK_FILE ,
|
|
.BR XMAKEPROG ,
|
|
.BR XM_ARCH ,
|
|
.BR XP_ARCH ,
|
|
.BR _CCOM ,
|
|
.BR _DEFAULTSDIR ,
|
|
.BR _DEFCCOM ,
|
|
.BR _DEFINSGRP ,
|
|
.BR _DEFINSMODE ,
|
|
.BR _DEFINSUSR ,
|
|
.BR _DEFUMASK ,
|
|
.BR _DIRNAME ,
|
|
.BR _INCDIRS ,
|
|
.BR _MAKEPROG ,
|
|
.BR _MARCH ,
|
|
.BR _M_ARCH ,
|
|
.BR _O_ARCH ,
|
|
.BR _PARCH ,
|
|
.BR _P_ARCH ,
|
|
.BR _UNIQ ,
|
|
.BR __CCOM ,
|
|
.BR __DEFAULTSDIR ,
|
|
.BR __DEFCCOM ,
|
|
.BR __DEFINSGRP ,
|
|
.BR __DEFINSMODE ,
|
|
.BR __DEFINSUSR ,
|
|
.BR __DEFUMASK ,
|
|
.BR __DIRNAME ,
|
|
.BR __INCDIRS ,
|
|
.BR __MAKEPROG ,
|
|
.BR __MARCH ,
|
|
.BR __M_ARCH ,
|
|
.BR __PARCH ,
|
|
.BR __P_ARCH ,
|
|
|
|
.SH BUGS
|
|
|
|
.SH "Source Tree Hierarchy
|
|
.LP
|
|
The following outline gives a quick tour through a typical
|
|
source hierarchy:
|
|
.LP
|
|
.na
|
|
.nh
|
|
.PD 0
|
|
.TP
|
|
.B .../
|
|
root directory of the source tree
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Makefile
|
|
the top Makefile
|
|
.TP
|
|
.B Targetdirs
|
|
a file containing a list of directories that are needed
|
|
for that project.
|
|
If the system needs different target lists depending
|
|
on the target system architecture , use target specific files in
|
|
.B .../TARGETS/
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../RULES/
|
|
the location of makefiles (included rules)
|
|
.
|
|
.RS
|
|
.TP
|
|
.B rules.top
|
|
the mandatory include rules (needed to setup basic rules)
|
|
.TP
|
|
.B rules.aux
|
|
rules needed to install a non localized auxiliary file
|
|
.TP
|
|
.B rules.cmd
|
|
rules needed to make an ordinary command (like /bin/sh)
|
|
.TP
|
|
.B rules.drv
|
|
rules needed to make a device driver
|
|
.TP
|
|
.B rules.lib
|
|
rules needed to make a standard (nonshared) library
|
|
.TP
|
|
.B rules.loc
|
|
rules needed to install a localized auxiliary file
|
|
.TP
|
|
.B rules.man
|
|
rules needed to install a localized manual page
|
|
.TP
|
|
.B rules.scr
|
|
rules needed to install a localized shell script
|
|
.TP
|
|
.B rules.shl
|
|
rules needed to make a shared library
|
|
.TP
|
|
.B rules.mks
|
|
rules needed to make more than one target in a specific directory
|
|
.TP
|
|
.B rules.dir
|
|
rules needed to make targets that are located in sub directories
|
|
to the current directory
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../DEFAULTS/
|
|
default definitions for various target architectures are
|
|
located in this directory. Templates for some architectures can
|
|
be found in the
|
|
.I .../TEMPLATES/
|
|
directory.
|
|
.RS
|
|
.TP
|
|
.B Defaults
|
|
default definitions for that source tree. System dependent
|
|
definitions are in
|
|
.B .../DEFAULTS/Defaults.*
|
|
.RE
|
|
.TP
|
|
.B .../TARGETS/
|
|
target list definitions for various target architectures are
|
|
located in this directory.
|
|
.TP
|
|
.B .../TEMPLATES/
|
|
templates that should be used inside the project
|
|
(rename to Makefile, if it is the only makefile in that directory,
|
|
rename to
|
|
.I target.mk,
|
|
if there is more than one target in that directory)
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Defaults
|
|
Defaults file for the source root directory
|
|
.TP
|
|
.B Defaults.linux
|
|
Defaults file for
|
|
.IR linux .
|
|
This should be installed in the
|
|
.B .../DEFAULTS/
|
|
directory.
|
|
.TP
|
|
.B Makefile.root
|
|
Makefile for the source root directory
|
|
.TP
|
|
.B Makefile.aux
|
|
Makefile for a non localized auxiliary file
|
|
.TP
|
|
.B Makefile.cmd
|
|
Makefile for an ordinary command (like /bin/sh)
|
|
.TP
|
|
.B Makefile.lib
|
|
Makefile for a standard (nonshared) library
|
|
.TP
|
|
.B Makefile.loc
|
|
Makefile for a localized auxiliary file
|
|
.TP
|
|
.B Makefile.man
|
|
Makefile for a localized manual page
|
|
.TP
|
|
.B Makefile_de.man
|
|
Makefile for a localized manual page in the german locale
|
|
.TP
|
|
.B Makefile.scr
|
|
Makefile for a localized shell script
|
|
.TP
|
|
.B Makefile.shl
|
|
Makefile for a shared library
|
|
.TP
|
|
.B Makefile.drv
|
|
Makefile for a device driver
|
|
.TP
|
|
.B Makefile.mks
|
|
Makefile for more than one target in a specific directory
|
|
.TP
|
|
.B Makefile.dir
|
|
Makefile for targets that are located in sub directories
|
|
to the current directory
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../cmd/
|
|
source tree for normal commands
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Makefile
|
|
the makefile for the
|
|
.I cmd
|
|
sub directory
|
|
.TP
|
|
.B Targetdirs.sun4m
|
|
a file containing a list of directories like
|
|
.I myprog
|
|
(see below) that are needed
|
|
for that specific architecture.
|
|
.TP
|
|
.B myprog/
|
|
directory where the sources for a specific command are located
|
|
.
|
|
.RS
|
|
.TP
|
|
Makefile
|
|
makefile for
|
|
.I myprog
|
|
.TP
|
|
Makefile.man
|
|
makefile for the manual page of
|
|
.I myprog
|
|
.TP
|
|
mprog.c
|
|
source for myprog
|
|
.TP
|
|
mprog.tr
|
|
troff source for the manual page of myprog
|
|
.TP
|
|
.B OBJ/
|
|
directory where system specific sub directories are located
|
|
.
|
|
.RS
|
|
.TP
|
|
.B sparc\-sunos5\-cc/
|
|
directory for binaries that belong to a specific system
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.br
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.br
|
|
.ne 5
|
|
.TP
|
|
.B .../lib/
|
|
directory where the sources for a libraries are located
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Makefile
|
|
the makefile for the
|
|
.I lib
|
|
sub directory
|
|
.TP
|
|
.B Targetdirs.sun4m
|
|
a file containing a list of directories like
|
|
.I libfoo
|
|
(see below) that are needed
|
|
for that specific architecture.
|
|
.TP
|
|
.B libfoo/
|
|
directory where all source files for libfoo are located
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../kernel
|
|
directory for kernel modules
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Makefile
|
|
the makefile for the
|
|
.I kernel
|
|
sub directory
|
|
.TP
|
|
.B Targetdirs.sun4m
|
|
a file containing a list of directories like
|
|
.I drv
|
|
(see below) that are needed
|
|
for that specific architecture.
|
|
.TP
|
|
.B drv/
|
|
directory where drivers are located
|
|
.
|
|
.RS
|
|
.TP
|
|
.B Makefile
|
|
the makefile for the
|
|
.I drv
|
|
sub directory
|
|
.TP
|
|
.B Targetdirs.sun4m
|
|
a file containing a list of directories like
|
|
.I mydrv
|
|
(see below) that are needed
|
|
for that specific architecture.
|
|
.TP
|
|
.B mydrv/
|
|
source for a specific driver
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../include
|
|
directory for global include files that are used in that project
|
|
.
|
|
.TP
|
|
.B .../bins
|
|
directory for binary programs that are created/needed while compiling
|
|
the project
|
|
.RS
|
|
.TP
|
|
.B sparc\-sunos5\-cc/
|
|
directory for binaries that belong to a specific system
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../libs
|
|
directory for libraries that are created/needed while compiling
|
|
the project
|
|
.RS
|
|
.TP
|
|
.B sparc\-sunos5\-cc/
|
|
directory for libraries that belong to a specific system
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.TP
|
|
.B .../incs
|
|
directory for include files that are created/needed while compiling
|
|
the project
|
|
.RS
|
|
.TP
|
|
.B sparc\-sunos5\-cc/
|
|
directory for include files that belong to a specific system
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.TP
|
|
\&.\|.\|.
|
|
.RE
|
|
.
|
|
.ad
|
|
.PD
|
|
|
|
.SH AUTHOR
|
|
.nf
|
|
J\*org Schilling
|
|
Seestr. 110
|
|
D-13353 Berlin
|
|
Germany
|
|
.fi
|
|
.PP
|
|
Mail bugs and suggestions to:
|
|
.PP
|
|
.B
|
|
joerg@schily.isdn.cs.tu-berlin.de
|
|
or
|
|
.B
|
|
js@cs.tu-berlin.de
|
|
or
|
|
.B
|
|
jes@fokus.gmd.de
|