Ignore:
Timestamp:
Nov 19, 2000, 9:35:50 AM (25 years ago)
Author:
bird
Message:

New makefile style.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/pdwin32.vac3.post

    r4547 r4620  
    1 # $Id: pdwin32.vac3.post,v 1.3 2000-11-01 01:34:19 bird Exp $
     1# $Id: pdwin32.vac3.post,v 1.4 2000-11-19 08:31:20 bird Exp $
    22#
    33# Odin32 API
     
    99# Define NOTEXPDEF to remove the $(TARGET).lib and $(TARGET)exp.def rules.
    1010# Define EXETARGET to make an executable. (This also applies to pdwin32.mk.)
     11# Define LIBTARGET to make an internal library.
    1112# Define LOCALCLEAN if only the local directory is to be clean.
    1213# Define CLEAN2 to invoke a second clean rule named 'clean2'.
    1314# Define NOCLEAN to exclude the clean rule. (Remember to make your own!)
    1415#
    15 # New style: (define NEW_STYLE)
     16# New style: (!defined OLD_STYLE)
    1617# Define NO_ALL_RULE to not make default all rule.
    1718# Define NO_LIB_RULE to not make default lib rule.
    18 # Define NO_DLL_RULE to not make default dll rule.
    19 # Define NO_EXE_RULE to not make default exe rule.
     19# Define NO_MAIN_RULE to not make default main target rule.
    2020# Define NO_LNKFILE_RULE to not make default link-file rule.
    2121# Define NO_DEP_RULE to not make dependencies rule.
    2222# Define NO_CLEAN_RULE to not make clean rule (same as NOCLEAN - use this!).
     23# Define NO_INTERNAL_LIBS to not include libs rule for subdirectories.
     24# Define NO_MAIN_BIN_COPY to not copy the target and sym file to the main
     25#    binary directory. It is only copied to the compiler specific directory.
     26#    Main bin is /bin. Compiler specific bin is /bin/debug, /bin/debug.vac36, etc.
     27# Define ADDITIONAL_DEP to add dependencies rules.
     28#
     29# Define MAKEFILE if the name of the makefile isn't "makefile".
     30# Define DEFFILE to specify another file than $(TARGET).def or $(ORGTARGET).def.
     31#    Define this if your .exe file have a .def file.
     32# Define OS2RES as the names of the OS/2 .res file to create and link
     33#    with the target .dll or .exe.
     34# Define LIBS as a list of all the libraries to link
     35#    with the target .dll or .exe.
     36# Define SUBDIRS when you have subdirectories which should be made.
     37#    dep and lib supports this fully. The rule libs are added, since we assume you
     38#    makes internal libraries in the subdirectories. The libs rule is one of the
     39#    dependencies of the main target.
    2340#
    2441
    2542!ifndef TARGET_EXTENSION
    26 !ifdef EXETARGET
     43!   ifdef EXETARGET
    2744TARGET_EXTENSION=exe
    28 !else
     45!   else
     46!       ifdef LIBTARGET
     47TARGET_EXTENSION=lib
     48!       else
    2949TARGET_EXTENSION=dll
    30 !endif
    31 !endif
    32 
    33 !ifdef NEW_STYLE
     50!       endif
     51!   endif
     52!endif
     53
     54
     55!ifndef OLD_STYLE
     56
     57# Set default MAKEFILE if needed
     58!ifndef MAKEFILE
     59MAKEFILE = makefile
     60!endif
     61
     62# Set default ORGTARGET if needed.
     63!ifndef ORGTARGET
     64ORGTARGET=$(TARGET)
     65!endif
     66
     67# Set default DEFFILE if needed. (Currently for dlls only.)
     68!ifndef DEFFILE
     69!   ifndef EXETARGET
     70DEFFILE = $(ORGTARGET).def
     71!   endif
     72!endif
     73
     74# Set INTLIBS (interal) if SUBDIRS is defined and NO_INTERNAL_LIBS is undefined.
     75!ifdef SUBDIRS
     76!   ifndef NO_INTERNAL_LIBS
     77!       ifndef LIBTARGET
     78INTLIBS = libs
     79!       else
     80INTLIBS = libs_sub
     81!       endif
     82!   endif
     83!endif
     84
     85
     86!ifndef LIBTARGET
    3487!ifndef EXETARGET
    35 
    36 
    37 # All rule - build objs, target dll, copies target to bin and makes libs.
     88###############################################################################
     89# DLL Target
     90###############################################################################
     91
     92#
     93# Dll: All rule - build objs, target dll, copies target to bin and makes libs.
     94#
    3895!ifndef NO_ALL_RULE
    3996all:    $(OBJDIR) \
     97        $(INTLIBS) \
    4098        $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION) \
     99        $(OBJDIR)\$(TARGET).sym \
    41100        $(PDWIN32_BIN)\$(TARGET).$(TARGET_EXTENSION) \
     101        $(PDWIN32_BIN)\$(TARGET).sym \
    42102        lib
    43103!endif
    44104
    45105
    46 # Lib rule - build importlibrary (and evt. other libs)
     106#
     107# Dll: Lib rule - build importlibrary (and evt. other libs)
     108#
    47109!ifndef NO_LIB_RULE
    48 lib:    $(TARGET).lib $(PDWIN32_LIB)\$(TARGET).lib
    49 !endif
    50 
    51 
    52 # Dll rule - builds the target dll.
    53 !ifndef NO_DLL_RULE
    54 $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION): $(OBJS) $(TARGET).def $(OBJDIR)\$(TARGET).lrf
     110lib:    $(ORGTARGET).lib $(PDWIN32_LIB)\$(ORGTARGET).lib
     111!endif
     112
     113
     114#
     115# Dll: Main target rule - builds the target dll.
     116#
     117!ifndef NO_MAIN_RULE
     118$(OBJDIR)\$(TARGET).$(TARGET_EXTENSION): $(OBJS) $(OS2RES) $(DEFFILE) $(OBJDIR)\$(TARGET).lrf
    55119    -4 $(LD2) $(LD2FLAGS) @$(OBJDIR)\$(TARGET).lrf
    56 !endif
    57 
    58 
    59 # Linker file - creates the parameter file passed on to the linker.
     120!ifdef OS2RES
     121    $(OS2RC) $(OS2RCLFLAGS) $(OS2RES) $@
     122!endif
     123!endif
     124
     125
     126#
     127# Dll: Linker file - creates the parameter file passed on to the linker.
     128#
    60129!ifndef NO_LNKFILE_RULE
    61 $(OBJDIR)\$(TARGET).lrf: makefile
     130$(OBJDIR)\$(TARGET).lrf: $(MAKEFILE)
    62131    @echo Creating file <<$@
    63132/OUT:$(OBJDIR)\$(TARGET).$(TARGET_EXTENSION)
     
    65134$(OBJS)
    66135$(LIBS)
    67 $(TARGET).def
     136$(DEFFILE)
    68137<<keep
    69138!endif
    70139
    71140
    72 # Dep rule - makes depenencies for C, C++ and Asm files.
    73 !ifndef NO_DEP_RULE
    74 dep:
    75     $(DEPEND) -I$(PDWIN32_INCLUDE);$(PDWIN32_INCLUDE)\win \
    76         *.c *.cpp *.h *.asm *.inc $(PDWIN32_INCLUDE)\*.h
    77 !endif
    78 
    79141!else # !ifndef EXETARGET
    80 
    81 
    82 # All rule - build objs, target exe, copies target to bin.
     142###############################################################################
     143# EXE Target
     144###############################################################################
     145
     146#
     147# Exe: All rule - build objs, target exe, copies target to bin.
     148#
    83149!ifndef NO_ALL_RULE
    84150all:    $(OBJDIR) \
     151        $(INTLIBS) \
    85152        $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION) \
    86         $(PDWIN32_BIN)\$(TARGET).$(TARGET_EXTENSION)
    87 !endif
    88 
    89 
    90 # Lib rule - dummy rule
     153        $(OBJDIR)\$(TARGET).sym \
     154        $(PDWIN32_BIN)\$(TARGET).$(TARGET_EXTENSION) \
     155        $(PDWIN32_BIN)\$(TARGET).sym
     156!endif
     157
     158
     159#
     160# Exe: Lib rule - dummy rule
     161#
    91162!ifndef NO_LIB_RULE
    92163lib:
     
    94165
    95166
    96 # Exe rule - builds the target exe.
    97 !ifndef NO_EXE_RULE
    98 $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION): $(OBJS) $(TARGET).def $(OBJDIR)\$(TARGET).lrf
     167#
     168# Exe: Main target rule - builds the target exe.
     169#
     170!ifndef NO_MAIN_RULE
     171$(OBJDIR)\$(TARGET).$(TARGET_EXTENSION): $(OBJS) $(OS2RES) $(DEFFILE) $(OBJDIR)\$(TARGET).lrf
    99172    -4 $(LD2) $(LD2FLAGS) @$(OBJDIR)\$(TARGET).lrf
    100 !endif
    101 
    102 
    103 # Linker file - creates the parameter file passed on to the linker.
     173!ifdef OS2RES
     174    $(OS2RC) $(OS2RCLFLAGS) $(OS2RES) $@
     175!endif
     176!endif
     177
     178
     179#
     180# Exe: Linker file - creates the parameter file passed on to the linker.
     181#
    104182!ifndef NO_LNKFILE_RULE
    105 $(OBJDIR)\$(TARGET).lrf: makefile
     183$(OBJDIR)\$(TARGET).lrf: $(MAKEFILE)
    106184    @echo Creating file <<$@
    107185/OUT:$(OBJDIR)\$(TARGET).$(TARGET_EXTENSION)
    108186/MAP:$(OBJDIR)\$(TARGET).map
    109187$(OBJS)
    110 $(LIBS)
    111 $(TARGET).def
     188$(LIBS) $(DEFFILE)
    112189<<keep
    113190!endif
    114191
    115192
    116 # Dep rule - makes depenencies for C, C++ and Asm files.
    117 !ifndef NO_DE_PRULE
    118 dep:
    119     $(DEPEND) -I$(PDWIN32_INCLUDE);$(PDWIN32_INCLUDE)\win \
    120         *.c *.cpp *.h *.asm *.inc $(PDWIN32_INCLUDE)\*.h
    121 !endif
    122 
    123 
    124 !endif # EXETARGET
    125 !endif # NEW_STYLE
    126 
    127 
    128 # Copy library rule.
    129 !ifndef ORGTARGET
    130 $(PDWIN32_LIB)\$(TARGET).lib: $(TARGET).lib
    131 !else
     193!endif # !ifndef EXETARGET !else
     194!else # !ifndef LIBTARGET
     195###############################################################################
     196# LIB target (internal object library)
     197###############################################################################
     198
     199#
     200# Localcleanup is default for internal object libraries.
     201#
     202LOCALCLEAN = 1
     203
     204
     205#
     206# Lib: All rule - build objs and target library.
     207#
     208!ifndef NO_ALL_RULE
     209all:    $(OBJDIR) \
     210        $(INTLIBS) \
     211        $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION)
     212!endif
     213
     214
     215#
     216# Lib: Lib rule - dummy rule
     217#
     218!ifndef NO_LIB_RULE
     219lib:
     220!endif
     221
     222
     223#
     224# Lib: Internal library rule. Same as the all rule.
     225#
     226!ifndef NO_INTERNAL_LIBS
     227libs: all
     228!endif
     229
     230
     231#
     232# Lib: Main target rule - builds the target internal library.
     233#
     234!ifndef NO_MAIN_RULE
     235$(OBJDIR)\$(TARGET).$(TARGET_EXTENSION): $(OBJS)
     236    $(RM) $@
     237    $(ILIB) $(ILIBFLAGS) $@ @<<
     238$(OBJS:  = &^
     239)
     240$(OBJDIR)\$(@B).lst
     241<<
     242!endif
     243
     244
     245!endif # !ifndef LIBTARGET
     246
     247
     248###############################################################################
     249# Common rules for both exe and dll, new style
     250###############################################################################
     251
     252#
     253# Common (new): Dep rule - makes depenencies for C, C++ and Asm files.
     254#
     255!ifndef NO_DEP_RULE
     256dep: dep_internal $(ADDITIONAL_DEP)
     257dep_internal:
     258    $(DEPEND) $(CINCLUDES) *.c *.cpp *.h *.asm *.inc \
     259        *.rc *.dlg $(PDWIN32_INCLUDE)\*.h -robj *.orc
     260!ifdef SUBDIRS
     261    $(DODIRS) "$(SUBDIRS)"  $(MAKE_CMD) dep
     262!endif
     263!endif
     264
     265
     266#
     267# Common: Internal library rule. Make libraries in subdirectories.
     268#   For makefiles with subdirectories is common to have make libraries in subdirectories.
     269#
     270!ifndef NO_INTERNAL_LIBS
     271!ifdef INTLIBS
     272$(INTLIBS):
     273    $(DODIRS) "$(SUBDIRS)"  $(MAKE_CMD) libs
     274!endif
     275!endif
     276
     277!endif # OLD_STYLE
     278
     279###############################################################################
     280# Common rules for both exe and dll, old and new style.
     281###############################################################################
     282
     283#
     284# Common: Copy library rule.
     285#
    132286$(PDWIN32_LIB)\$(ORGTARGET).lib: $(ORGTARGET).lib
    133 !endif
    134287    $(CP) $** $@
    135288
    136289
    137 # Copy dll rule.
     290#
     291# Common: Copy dll/exe rule.
     292#
    138293$(PDWIN32_BIN)\$(TARGET).$(TARGET_EXTENSION): $(OBJDIR)\$(TARGET).$(TARGET_EXTENSION)
     294    $(CP) $** $@
     295!ifndef NO_MAIN_BIN_COPY
     296    -$(CP) $** $(@D)..\..\$(@F)
     297!endif
     298
     299
     300#
     301# Common: Copy sym rule.
     302#
     303$(PDWIN32_BIN)\$(TARGET).sym: $(OBJDIR)\$(TARGET).sym
     304    $(CP) $** $@
     305!ifndef NO_MAIN_BIN_COPY
     306    -$(CP) $** $(@D)..\..\$(@F)
     307!endif
     308
     309
     310#
     311# Common: Make sym file rule.
     312#
     313$(OBJDIR)\$(TARGET).sym: $(OBJDIR)\$(TARGET).map
    139314    cd $(OBJDIR)
    140315    $(MAPSYM) $(TARGET).map
    141316    cd ..\..
    142     $(CP) $(OBJDIR)\$(TARGET).sym $(PDWIN32_BIN)
    143     $(CP) $** $@
    144     -$(CP) $** $(@D)..\..\$(@F)
    145     -$(CP) $(OBJDIR)\$(TARGET).sym $(@D)..\..
    146 
    147 
     317
     318
     319#
     320# Common: Make library from the <>exp.def or the <>.def file.
     321#
    148322!ifndef NOTEXPDEF
    149 # make library from the <>exp.def file.
    150 !ifndef ORGTARGET
    151 $(TARGET).LIB: $(TARGET)exp.def
     323$(ORGTARGET).lib: $(ORGTARGET)exp.def
     324    $(IMPLIB) $(IMPLIBFLAGS) $@ $**
    152325!else
    153 $(ORGTARGET).LIB: $(ORGTARGET)exp.def
    154 !endif
     326$(TARGET).lib: $(DEFFILE)
    155327    $(IMPLIB) $(IMPLIBFLAGS) $@ $**
    156     $(CP) $@ $(PDWIN32_LIB)
    157 
    158 
    159 # make the <>exp.def file.
    160 !ifndef ORGTARGET
    161 $(TARGET)exp.def: $(TARGET).def
    162 !else
    163 $(ORGTARGET)exp.def: $(ORGTARGET).def
    164 !endif
     328!endif
     329
     330
     331#
     332# Common: Make the <>exp.def file.
     333#
     334!ifndef NOTEXPDEF
     335$(ORGTARGET)exp.def: $(DEFFILE)
    165336    $(IMPDEF) $** $@
    166337!endif
    167338
    168339
    169 # Create the object directory.
     340#
     341# Common: Create the object directory.
     342#
    170343$(OBJDIR):
    171344    @if not exist bin $(MKDIR) bin
     
    174347
    175348#
    176 # General clean rule. To clean more add it to CLEANEXTRAS!
     349# Common: General clean rule. To clean more add it to CLEANEXTRAS!
    177350#
    178351!ifndef NOCLEAN
     
    182355clean:  clean2
    183356!endif
    184     $(RM) *.LIB *.res *.map *.pch \
     357    $(RM) *.lib *.res *.map *.pch \
    185358!if "$(OBJDIR)" != ""
    186359     $(OBJDIR)\* \
    187360!endif
    188361!ifndef LOCALCLEAN
    189         $(PDWIN32_LIB)\$(TARGET).LIB \
    190         $(TARGET)exp.def \
     362        $(PDWIN32_LIB)\$(ORGTARGET).lib \
     363        $(ORGTARGET)exp.def \
    191364        $(PDWIN32_BIN)\$(TARGET).$(TARGET_EXTENSION) *.$(TARGET_EXTENSION) \
    192365        $(PDWIN32_BIN)\$(TARGET).sym *.sym \
     
    196369!endif
    197370!endif
    198 
    199 
    200 #
    201 # Include the .depend file.
     371!ifdef SUBDIRS
     372    $(DODIRS) "$(SUBDIRS)"  $(MAKE_CMD) clean
     373!endif
     374
     375
     376#
     377# Common: Include the .depend file.
    202378#   If the depend file don't exists we'll complain about it.
    203379#
     
    210386!   endif
    211387!endif
     388
Note: See TracChangeset for help on using the changeset viewer.