📄 imake.rules
字号:
XCOMM -------------------------------------------------------------------------
XCOMM Imake rules for building libraries, programs, scripts, and data files
XCOMM rules: $XConsortium: Imake.rules,v 1.123 91/09/16 20:12:16 rws Exp $
/*
* MACHINE-INDEPENDENT RULES; DO NOT MODIFY
*
* Warning, when defining rules: make sure you do not include both a trailing
* backslash and double ampersand backslash or else you will get an extra
* backslash in the Makefile.
*
* The following macros are defined for the various templates and Imakefiles
* (for a list of the applicable make variables, see the template files):
*
* SaberProgramTarget (program,srclist,objlist,locallibs,syslibs)
* RemoveTargetProgram (program)
* MakeDir (dir)
* BuildIncludes (srclist,dstsubdir,dstupdir)
* NormalProgramTarget (program,objects,deplibs,locallibs,syslibs)
* SetUIDProgramTarget (program,objects,deplibs,locallibs,syslibs)
* SingleProgramTarget (program,objects,locallibs,syslibs)
* SimpleProgramTarget (program)
* ComplexProgramTarget (program)
* ComplexProgramTarget_1 (program,locallib,syslib)
* ComplexProgramTarget_2 (program,locallib,syslib)
* ComplexProgramTarget_3 (program,locallib,syslib)
* ServerTarget (server,subdirs,objects,libs,syslibs)
* RanLibrary (args)
* InstallLibrary (libname,dest)
* MergeIntoInstalledLibrary (tolib,fromlib)
* InstallLibraryAlias (libname,alias,dest)
* InstallLintLibrary (libname,dest)
* InstallManPageLong (file,destdir,dest)
* InstallManPage (file,destdir)
* InstallManPageAliases (file,destdir,aliases)
* InstallNamedNonExec (srcname,dstname,dest)
* InstallNonExecFile (file,dest)
* InstallNonExec (file,dest)
* InstallProgramWithFlags (program,dest,flags)
* InstallProgram (program,dest)
* InstallScript (program,dest)
* InstallNamedProg (srcname,dstname,dest)
* LinkFileList (step,list,dir,sub)
* InstallMultipleDestFlags (step,list,dest,flags)
* InstallMultipleDest (step,list,dest)
* InstallMultiple (list,dest)
* InstallMultipleFlags (list,dest,flags)
* InstallMultipleMan (list,dest)
* InstallAppDefaults (class)
* InstallAppDefaultsLong (file,class)
* DependDependency ()
* DependTarget ()
* DependTarget3 (srcs1,srcs2,srcs3)
* CleanTarget ()
* TagsTarget ()
* ImakeDependency (target)
* BuildMakefileTarget (notused,imakeflags)
* MakefileTarget ()
* LibMkdir (dir)
* LibCleanDir (dir)
* ObjectCompile (options)
* NormalLibObjCompile (options)
* NormalSharedLibObjCompile (options)
* LibObjCompile (dir,options)
* DebuggedLibObjCompile (options)
* ProfiledLibObjCompile (options)
* SharedLibObjCompile (options)
* NormalLibraryObjectRule ()
* NormalFortranObjectRule ()
* ObjectFromSpecialSource (dst,src,flags)
* SpecialObjectRule (objs,depends,options)
* NormalLibraryTarget (libname,objlist)
* NormalLibraryTarget2 (libname,objlist1,objlist2)
* NormalLibraryTarget3 (libname,objlist1,objlist2,objlist3)
* NormalDepLibraryTarget (libname,deplist,objlist)
* SubdirLibraryRule (objlist)
* ProfiledLibraryTarget (libname,objlist)
* DebuggedLibraryTarget (libname,objlist)
* AliasedLibraryTarget (libname,alias)
* NormalRelocatableTarget (objname,objlist)
* ProfiledRelocatableTarget (objname,objlist)
* DebuggedRelocatableTarget (objname,objlist)
* LintLibraryTarget (libname,srclist)
* NormalLintTarget (srclist)
* LintTarget ()
* LinkSourceFile (src,dir)
* LinkFile (tofile,fromfile)
* MakeSubincludesForBuild (step,dir,srclist)
* NamedTargetSubdirs (name,dirs,verb,flags,subname)
* NamedMakeSubdirs (name,dirs)
* MakeSubdirs (dirs)
* DependSubdirs (dirs)
* ForceSubdirs (dirs)
* InstallSubdirs (dirs)
* InstallManSubdirs (dirs)
* IncludesSubdirs (dirs)
* NamedCleanSubdirs (name,dirs)
* CleanSubdirs (dirs)
* NamedTagSubdirs (name,dirs)
* TagSubdirs (dirs)
* MakeLintSubdirs (dirs,target,subtarget)
* LintSubdirs (dirs)
* MakeLintLibSubdirs (dirs)
* MakeMakeSubdirs (dirs,target)
* MakeNsubdirMakefiles ()
* MakefileSubdirs (dirs)
* CppScriptTarget (dst,src,defs,deplist)
* MakeScriptFromCpp (name,defs)
* CppFileTarget (dst,src,defs,deplist)
* MakeDirectories (step,dirs)
* MakeFontsDir (deplist)
* MakeFonts ()
* InstallFontObjs (objs,dest)
* InstallFonts (dest)
* InstallFontAliases (dest)
* FontSrc (basename)
* FontBaseObj (basename)
* InstallFontScale (dest)
* UncompressedFontTarget (basename)
* UncompressedFontTarget (basename)
* CompressedFontTarget (basename)
* FontTarget (basename)
* FontObj (basename)
* AllTarget (depends)
*
*
* The following are in Imake.tmpl:
*
* Concat (a,b)
* Concat3 (a,b,c)
*
*
* The following are in specific <os>Lib.rules:
*
* SharedLibraryTarget (libname,rev,solist,down,up)
* SharedLibraryDataTarget (libname,rev,salist)
* InstallSharedLibrary (libname,rev,dest)
* InstallSharedLibraryData (libname,rev,dest)
*
*/
#define NullParameter
/* if [ -d ] or [ ! -d ] causes make to fail, define this as - */
#ifndef DirFailPrefix
#define DirFailPrefix
#endif
/*
* SaberProgramTarget - generate rules to make Saber-C read in sources and
* objects.
*/
#ifndef SaberProgramTarget
#if HasSaberC
#define SaberProgramTarget(program,srclist,objlist,locallibs,syslibs) @@\
Concat(saber_,program):: srclist @@\
XCOMM load $(ALLDEFINES) srclist locallibs $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) syslibs @@\
@@\
Concat(osaber_,program):: objlist @@\
XCOMM load $(ALLDEFINES) objlist locallibs $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) syslibs
#else
#define SaberProgramTarget(program,srclist,objlist,locallibs,syslibs) /**/
#endif
#endif
#ifndef RemoveTargetProgram
#if RemoveTargetProgramByMoving
#define RemoveTargetProgram(program) \
if [ -f program ]; then $(RM) Concat(program,~); $(MV) program Concat(program,~); fi
#else
#define RemoveTargetProgram(program) $(RM) program
#endif
#endif
#ifndef MakeDir
#define MakeDir(dir) DirFailPrefix@if [ -d dir ]; then set +x; \ @@\
else (set -x; $(MKDIRHIER) dir); fi
#endif
#ifndef BuildIncludes
#define BuildIncludes(srclist,dstsubdir,dstupdir) @@\
includes:: @@\
MakeDir($(BUILDINCDIR)/dstsubdir) @@\
@(set -x; cd $(BUILDINCDIR)/dstsubdir; for i in srclist; do \ @@\
$(RM) $$i; \ @@\
$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \ @@\
done)
#endif /* BuildIncludes */
/*
* NormalProgramTarget - generate rules to compile and link the indicated
* program; since it does not use any default object files, it may be used for
* multiple programs in the same Imakefile.
*/
#ifndef NormalProgramTarget
#define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
program: objects deplibs @@\
RemoveTargetProgram($@) @@\
$(CC) -o $@ objects $(LDOPTIONS) locallibs $(LDLIBS) syslibs $(EXTRA_LOAD_FLAGS) @@\
@@\
clean:: @@\
$(RM) program
#endif /* NormalProgramTarget */
#ifndef SetUIDProgramTarget
#define SetUIDProgramTarget NormalProgramTarget
#endif
/*
* SingleProgramTarget - obsolete version of NormalProgramTarget that does
* not have deplibs.
*/
#ifndef SingleProgramTarget
#define SingleProgramTarget(program,objects,locallibs,syslibs) @@\
NormalProgramTarget(program,objects,NullParameter,locallibs,syslibs)
#endif /* SingleProgramTarget */
/*
* SimpleProgramTarget - generate rules for compiling and linking programs
* that only have one C source file. It should only be used in Imakefiles
* that describe a single program.
*/
#ifndef SimpleProgramTarget
#define SimpleProgramTarget(program) @@\
OBJS = program.o @@\
SRCS = program.c @@\
@@\
ComplexProgramTarget(program)
#endif /* SimpleProgramTarget */
/*
* ComplexProgramTarget - generate rules for compiling and linking the
* program specified by $(OBJS) and $(SRCS), installing the program and its
* man page, and generating dependencies. It should only be used in
* Imakefiles that describe a single program.
*/
#ifndef ComplexProgramTarget
#define ComplexProgramTarget(program) @@\
PROGRAM = program @@\
@@\
AllTarget(program) @@\
@@\
program: $(OBJS) $(DEPLIBS) @@\
RemoveTargetProgram($@) @@\
$(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS) @@\
@@\
SaberProgramTarget(program,$(SRCS),$(OBJS),$(LOCAL_LIBRARIES),NullParameter) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR)) @@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
$(RM) $(PROGRAM)
#endif /* ComplexProgramTarget */
/*
* ComplexProgramTarget_1 - generate rules for compiling and linking the
* program specified by $(OBJS1) and $(SRCS1), installing the program and its
* man page, and generating dependencies for it and any programs described
* by $(SRCS2) and $(SRCS3). It should be used to build the primary
* program in Imakefiles that describe multiple programs.
*/
#ifndef ComplexProgramTarget_1
#define ComplexProgramTarget_1(program,locallib,syslib) @@\
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) @@\
SRCS = $(SRCS1) $(SRCS2) $(SRCS3) @@\
@@\
AllTarget($(PROGRAMS)) @@\
@@\
program: $(OBJS1) $(DEPLIBS1) @@\
RemoveTargetProgram($@) @@\
$(CC) -o $@ $(LDOPTIONS) $(OBJS1) locallib $(LDLIBS) syslib $(EXTRA_LOAD_FLAGS) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR)) @@\
@@\
SaberProgramTarget(program,$(SRCS1),$(OBJS1),locallib,syslib) @@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
$(RM) $(PROGRAMS)
#endif /* ComplexProgramTarget_1 */
/*
* ComplexProgramTarget_2 - generate rules for compiling and linking the
* program specified by $(OBJS2) and $(SRCS2) and installing the program and
* man page. It should be used to build the second program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_2
#define ComplexProgramTarget_2(program,locallib,syslib) @@\
program: $(OBJS2) $(DEPLIBS2) @@\
RemoveTargetProgram($@) @@\
$(CC) -o $@ $(LDOPTIONS) $(OBJS2) locallib $(LDLIBS) syslib $(EXTRA_LOAD_FLAGS) @@\
@@\
SaberProgramTarget(program,$(SRCS2),$(OBJS2),locallib,syslib) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR))
#endif /* ComplexProgramTarget_2 */
/*
* ComplexProgramTarget_3 - generate rules for compiling and linking the
* program specified by $(OBJS3) and $(SRCS3) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_3
#define ComplexProgramTarget_3(program,locallib,syslib) @@\
program: $(OBJS3) $(DEPLIBS3) @@\
RemoveTargetProgram($@) @@\
$(CC) -o $@ $(LDOPTIONS) $(OBJS3) locallib $(LDLIBS) syslib $(EXTRA_LOAD_FLAGS) @@\
@@\
SaberProgramTarget(program,$(SRCS3),$(OBJS3),locallib,syslib) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR))
#endif /* ComplexProgramTarget_3 */
/*
* ServerTarget - generate rules to compile, link, and relink an X server.
*/
#ifndef ServerTarget
#define ServerTarget(server,subdirs,objects,libs,syslibs) @@\
server: subdirs objects libs @@\
-@if [ -f server ]; then set -x; \ @@\
$(MV) server server.bak; else exit 0; fi @@\
$(CC) $(CDEBUGFLAGS) $(CCOPTIONS) -o server objects libs $(EXTRA_LIBRARIES) syslibs $(EXTRA_LOAD_FLAGS) @@\
@@\
Concat(load,server): @@\
-@if [ -f server ]; then set -x; \ @@\
$(MV) server server.bak; else exit 0; fi @@\
$(CC) $(CDEBUGFLAGS) $(CCOPTIONS) -o server objects libs $(EXTRA_LIBRARIES) syslibs $(EXTRA_LOAD_FLAGS)
#endif /* ServerTarget */
#if DoRanlibCmd
#define RanLibrary(args) $(RANLIB) args
#else
#define RanLibrary(args) /**/
#endif
/*
* InstallLibrary - generate rules to install the indicated library.
*/
#ifndef InstallLibrary
#define InstallLibrary(libname,dest) @@\
install:: libname.lib @@\
MakeDir($(DESTDIR)dest) @@\
( set -x; $(INSTALL) -c $(INSTLIBFLAGS) libname.lib $(DESTDIR)dest ) @@\
RanLibrary($(RANLIBINSTFLAGS) Concat($(DESTDIR)dest/libname.lib))
#endif /* InstallLibrary */
/*
* MergeIntoInstalledLibrary - generate rules to merge one library into another
*/
#ifndef MergeIntoInstalledLibrary
#define MergeIntoInstalledLibrary(tolib,fromlib) @@\
install:: fromlib @@\
$(SCRIPTSRC)/mergelib $(DESTDIR)tolib fromlib
#endif /* MergeIntoInstalledLibrary */
/*
* InstallLibraryAlias - generate rules to create a link from one library name
* to another for the purposes of aliasing.
*/
#ifndef InstallLibraryAlias
#define InstallLibraryAlias(libname,alias,dest) @@\
install:: @@\
-(cd $(DESTDIR)dest; \ @@\
$(RM) alias.lib ; \ @@\
$(LN) libname.lib alias.lib
#endif /* InstallLibraryAlias */
/*
* InstallLintLibrary - generate rules to install the indicated lint library.
*/
#ifndef InstallLintLibrary
#define InstallLintLibrary(libname,dest) @@\
install.ln:: Concat(llib-l,libname.ln) @@\
MakeDir($(DESTDIR)dest) @@\
(set -x; $(INSTALL) -c $(INSTLIBFLAGS) Concat(llib-l,libname.ln) $(DESTDIR)dest)
#endif /* InstallLintLibrary */
/*
* InstallManPageLong - generate rules to install the indicated manual page,
* giving it an alternate name. This is used for installing man pages whose
* base name without the .man suffix would normally be longer than 8 characters
* (the limit for using source code control systems on files systems with
* short file names).
*/
#ifndef InstallManPageLong
#define InstallManPageLong(file,destdir,dest) @@\
install.man:: file.man @@\
MakeDir($(DESTDIR)destdir) @@\
( set -x; $(INSTALL) -c $(INSTMANFLAGS) file.man $(DESTDIR)destdir/dest.$(MANSUFFIX))
#endif /* InstallManPageLong */
/*
* InstallManPage - generate rules to install the indicated manual page.
*/
#ifndef InstallManPage
#define InstallManPage(file,destdir) @@\
InstallManPageLong(file,destdir,file)
#endif /* InstallManPage */
/*
* InstallManPageAliases - generate rules to install manual page aliases.
*/
#ifndef InstallManPageAliases
#define InstallManPageAliases(file,destdir,aliases) @@\
install.man:: @@\
@(TMP=/tmp/tmp.$$$$; \ @@\
$(RM) $${TMP}; \ @@\
echo .so `basename destdir`/file.$(MANSUFFIX) > $${TMP}; \ @@\
for i in aliases; do (set -x; \ @@\
$(INSTALL) -c $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)); \ @@\
done; \ @@\
$(RM) $${TMP})
#endif /* InstallManPageAliases */
/*
* InstallNamedNonExec - generate rules to install a data file
*/
#ifndef InstallNamedNonExec
#define InstallNamedNonExec(srcname,dstname,dest) @@\
install:: srcname @@\
MakeDir($(DESTDIR)dest) @@\
( set -x; $(INSTALL) -c $(INSTDATFLAGS) srcname $(DESTDIR)dest/dstname)
#endif /* InstallNamedNonExec */
/*
* InstallNonExecFile - generate rules to install a data file
*/
#ifndef InstallNonExecFile
#define InstallNonExecFile(file,dest) @@\
install:: file @@\
MakeDir($(DESTDIR)dest) @@\
( set -x; $(INSTALL) -c $(INSTDATFLAGS) file $(DESTDIR)dest)
#endif /* InstallNonExecFile */
/*
* InstallNonExec - generate rules to install a data file, but does not
* try to create the destination directory (deprecated)
*/
#ifndef InstallNonExec
#define InstallNonExec(file,dest) @@\
install:: file @@\
( set -x; $(INSTALL) -c $(INSTDATFLAGS) file $(DESTDIR)dest)
#endif /* InstallNonExec */
/*
* InstallProgramWithFlags - generate rules to install an executable program
* using given install flags.
*/
#ifndef InstallProgramWithFlags
#define InstallProgramWithFlags(program,dest,flags) @@\
install:: program.exe @@\
MakeDir($(DESTDIR)dest) @@\
( set -x; $(INSTALL) -c $(INSTPGMFLAGS) flags program.exe $(DESTDIR)dest)
#endif /* InstallProgramWithFlags */
/*
* InstallProgram - generate rules to install an executable program using any
* special install flags set in $(INSTALLFLAGS).
*/
#ifndef InstallProgram
#define InstallProgram(program,dest) @@\
InstallProgramWithFlags(program,dest,NullParameter)
#endif /* InstallProgram */
/*
* InstallScript - install a shell script.
*/
#ifndef InstallScript
#define InstallScript(program,dest) @@\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -