bei-ekke / HTML Tidy in Deutsch / Einführung zu TidyLib / Makefile.vc6 mit deutschen Kommentaren


# Makefile.vc6 - für tidy - HTML Syntaxanalyser und gut Formatierer
# Für die Verwendung mit dem Microsoft's Visual C++ 6 nmake Werkzeug
#
#     $Date: 2002/11/08 18:36:13 $
#     $Revision: 1.2.2.8 $
#
# Verwendung:
#     nmake /f Makefile.vc6 all
#     nmake /f Makefile.vc6 clean
#     nmake /D /f Makefile.vc6 all > nmake_d_all.txt
#     nmake /D /f Makefile.vc6 clean > nmake_d_clean.txt
# oder
#     nmake /f Makefile.vc6 all DEBUG=1
#     nmake /f Makefile.vc6 clean DEBUG=1
#     nmake /D /f Makefile.vc6 all DEBUG=1 > nmake_d_all_debug.txt
#     nmake /D /f Makefile.vc6 clean DEBUG=1 > nmake_d_clean_debug.txt

CC=cl
RC=rc
LD=link

BINDIR= .\bin
INCLDIR= ./include/
SRCDIR= ./src/
TIDYEXT= /D SUPPORT_ACCESSIBILITY_CHECKS=1 /D SUPPORT_UTF16_ENCODINGS=1 /D SUPPORT_ASIAN_ENCODINGS=1

## Allgemeine Compilierungs-Einstellungen siehe Index "Compiler-Optionen" == Compiler-Referenz
# /nologo == Unterdrückt die Anzeige von Startinformationen
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Anpassen / [X] Startinfo und Informationsnachrichten unterdrücken
# /TC == Quellen sind C-Quellen (keine CPP-Quelle oder dergleichen)
# /W4   == Warnstufe 4 (die Maximale)
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Allgemein / Wartstufe: Stufe 4
# /Za   == ANSI C-Kompatibilität. Sprachkonstrukte, die mit ANSI C nicht kompatibel sind, werden als Fehler gekennzeichnet.
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Anpassen / [X] Spracherweiterungen deaktivieren
# /FD   == Erzeugt die Dateiabhängigkeiten
# /c    == Kompiliert ohne Binden
# /D  == selbiges als waere #define in der Quell-Datei geschrieben wurden
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Allgemein oder =Praeprozezzor / Praeprozessor-Definitionen:=WIN32,_CONSOLE,_MBCS,SUPPORT_ACCESSIBILITY_CHECKS=1,SUPPORT_UTF16_ENCODINGS=1,SUPPORT_ASIAN_ENCODINGS=1
# /I  == Sucht in einem Verzeichnis nach Include-Dateien
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Praeprozezzor / Zusätzliche Include-Verzeichnisse:=./include/
# In der folgenden Zeile /D "_CONSOLE" durch /D "_WINDOWS" für Windows-Programme ersetzen.

CFLAGS=/nologo /TC /W4 /Za /FD /c /D "WIN32" /D "_CONSOLE" /D "_MBCS" $(TIDYEXT) /I $(INCLDIR)

## Ergaenzende Debug-Compilierungs-Einstellungen siehe Index "Compiler-Optionen" == Compiler-Referenz
# /Gm   == Aktiviert minimale Neuerstellung
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Anpassen / [X] Minimales Neuerstellen aktivieren
# /GZ   == Fängt Release-Erstellungsfehler im Debug-Erstellungsvorgang ab
# /Zi   == Erzeugt vollständige Debug-Informationen
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Allgemein / Debug-Info:=Programmdatenbank
# /Od   == Deaktiviert Optimierung
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Optimierungen / Optimierungen:=Deaktivieren (Debug)
# /MTd == Erstellt eine ausführbare Multithreading-Datei mit LIBCMTD.LIB für den Debugger
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Code Generation / Laufzeit-Bibliothek:=Multithreaded debuggen
# /MDd == Erstellt eine             Multithreading-DLL   mit MSVCRTD.LIB für den Debugger
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Code Generation / Laufzeit-Bibliothek:=Multithreaded DLL debuggen
# /MD == Erstellt eine              Multithreading-DLL   mit MSVCRT.LIB 
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Code Generation / Laufzeit-Bibliothek:=Multithreaded DLL
# /D  == selbiges als waere #define in der Quell-Datei geschrieben wurden
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Allgemein oder =Praeprozezzor / Praeprozessor-Definitionen:=WIN32,_CONSOLE,_MBCS,SUPPORT_ACCESSIBILITY_CHECKS=1,SUPPORT_UTF16_ENCODINGS=1,SUPPORT_ASIAN_ENCODINGS=1,DEBUG,_DEBUG

CDEBUG=/Gm /GZ /Zi /Od /MD /D "DEBUG" /D "_DEBUG"

## Ergaenzende Release-Compilierungs-Einstellungen siehe Index "Compiler-Optionen" == Compiler-Referenz
# /O1   == Erstellt kompakten Code
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Optimierungen / Optimierungen:=Groesse minimieren
# /O2   == Erstellt schnellen Code
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Optimierungen / Optimierungen:=Geschwindigkeit erhoehen
# /Ox   == Verwendet maximale Optimierung
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Optimierungen / Optimierungen:=Anpassen
#   /O1 /O2 /Ox nur in Professional und Enterprise Editionen verfügbar, sonst muessen alle folgenden angegeben werden:
#   /O1 == /Ob1 /Og /Oy /Gs         /Gf /Gy /Os
#   /O2 == /Ob1 /Og /Oy /Gs /Oi /Ot /Gf /Gy
#   /Ox == /Ob1 /Og /Oy /Gs /Oi /Ot 
#      /Ob1 == In-line-Funktionserweiterung 
#      /Og  == Globale Optimierungen
#      /Oy  == Keine Rahmenzeiger
#      /Gs  == Stack-Überprüfungen steuern 
#      /Oi  == Intrinsic-Funktionen generieren
#      /Ot  == Schnellen Code bevorzugen
#      /Gf  == Aktiviert Zeichenfolgenzusammenfassung
#      /Gy  == Aktiviert Binden auf Funktionsebene
#      /Os  == Optimiert für kompakten Code (/Ot wird durch /Os ausser Kraft gesetzt)
# /MT   == Erstellt eine ausführbare Multithreading-Datei mit LIBCMT.LIB
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Code Generation / Laufzeit-Bibliothek:=Multithreaded
# /MD == Erstellt eine              Multithreading-DLL   mit MSVCRT.LIB 
#   Menues: Projekt / Einstellungen... / "C/C++" / Kategorie=Code Generation / Laufzeit-Bibliothek:=Multithreaded DLL

# CNDEBUG=/Ox /MD /D "NDEBUG"
CNDEBUG=/Ob1 /Og /Oy /Gs /Oi /Ot /Gf /Gy /MD /D "NDEBUG"

# /FoDateinamen == benennt oder erstellt .OBJ-Datei(en) in einem anderen Verzeichnis; Leerzeichen nach /Fo nicht zulaessig
NAMEFLAG=/Fo

## Allgemeine Linker-Einstellungen siehe Index "Linker" -> "Referenz" == Linker-Referenz
# /nologo == Unterdrückt die Anzeige von Startinformationen
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Anpassen / [X] Startinfo unterdrücken
# /subsystem:                                      == Teilt dem Betriebssystem mit, wie die .EXE-Datei auszuführen ist
# /subsystem:console == Subsystem CONSOLE wird für eine zeichenorientierte Win32-Anwendung verwendet. 
#                       Konsolen-Anwendungen erhalten vom Betriebssystem eine Konsole, wenn main oder wmain definiert wurde.
# /subsystem:windows == Subsystem WINDOWS bezieht sich auf eine Anwendung, die keine Konsole benötigt. 
#                       Win32-Betriebssysteme können nur WINDOWS-Anwendungen ausführen, wenn WinMain oder wWinMain definiert wurde
# /machine:I386 == Legt die Zielplattform fest
# /libpath:"." == Bibliothekspfad hinzufügen
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Eingabe / Zusätzlicher Bibliothekpfad:="."
# /incremental:no == Steuert inkrementelles Binden
#          sonst erscheint "...oder nicht durch den letzten inkrementellen Bindevorgang erstellt;..."
# In der folgenden Zeile /subsystem:console durch /subsystem:windows für Windows-Programme ersetzen.
# "/subsystem:windows" verursacht "error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16"
# ==> nach Q125750 = http://support.microsoft.com/default.aspx?scid=kb;en-us;125750
#          "PRB: Error LNK2001: '_WinMain@16': Unresolved External Symbol"
#     muesste ergaenzt werden ==> /entry:wWinMainCRTStartup ==> hilft aber auch nicht
# ==> nach Q100639 = http://support.microsoft.com/default.aspx?scid=kb;en-us;100639
#         "INFO: Unicode Support in the Microsoft Foundation Class Library"
#     ist irgendwas mit den "MFC*U.LIB MFC*UD.LIB" und /D "_USRDLL" soll man in der
#     Compiler-Zeile (CFLAGS=...) ergaenzen. Hilft aber auch nicht, also bleibe bei CONSOLE!
LDFLAGS= /nologo /subsystem:console /machine:I386 /libpath:"." /incremental:no
# "LIB.EXE ist eine Hülle für link -lib" --> also der "Schalter", um libtidy.lib zu erstellen
LIBFLAGS= -lib

## Ergaenzende Debug-Linker-Einstellungen siehe Index "Linker" -> "Referenz" == Linker-Referenz
# /debug == Erstellt Testinformationen
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Debug / [X] Debug-Info
# /pdbtype:sept == Typinformationen für den Testlauf in den .PDB-Quell-(Compiler)-Dateien verteilt belassen
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Debug / [X] Typen Trennen
# /nodefaultlib:LIBC == Bibliothek LIBC wird beim Auflösen von externen Verweisen nicht durchsucht.
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Eingabe / Bibliotheken ignorieren:= LIBC
LDDEBUG=/debug /pdbtype:sept /nodefaultlib:LIBC


## Ergaenzende Release-Linker-Einstellungen siehe Index "Linker" -> "Referenz" == Linker-Referenz
# /opt:nowin98                                     == ???
# /opt:ref == Funktionen und/oder Daten eliminieren, auf die kein Verweis existiert.
# /pdb:none == keine Programmdatenbank verwenden
#   Menues: Projekt / Einstellungen... / Linker / Kategorie:=Anpassen / [ ] Programmdatenbank verwenden
LDNDEBUG=/opt:nowin98 /opt:ref /pdb:none

#LIBS=KERNEL32.lib USER32.lib GDI32.lib COMDLG32.lib COMCTL32.lib ADVAPI32.lib IMM32.lib SHELL32.LIB OLE32.LIB
LIBS=
DEBUGLIBS=

!IFDEF DEBUG
CFLAGS=$(CFLAGS) $(CDEBUG)
LDFLAGS=$(LDFLAGS) $(LDDEBUG)
OBJDIR= .\debug
!ELSE
CFLAGS=$(CFLAGS) $(CNDEBUG)
LDFLAGS=$(LDFLAGS) $(LDNDEBUG)
OBJDIR= .\release
!ENDIF

OBJFILES=$(OBJDIR)\access.obj   $(OBJDIR)\attrs.obj    $(OBJDIR)\istack.obj\
        $(OBJDIR)\parser.obj    $(OBJDIR)\tags.obj     $(OBJDIR)\entities.obj\
        $(OBJDIR)\lexer.obj     $(OBJDIR)\pprint.obj   $(OBJDIR)\clean.obj\
        $(OBJDIR)\localize.obj  $(OBJDIR)\config.obj   $(OBJDIR)\alloc.obj\
        $(OBJDIR)\attrask.obj   $(OBJDIR)\attrget.obj  $(OBJDIR)\buffio.obj\
        $(OBJDIR)\tagask.obj    $(OBJDIR)\fileio.obj   $(OBJDIR)\streamio.obj\
        $(OBJDIR)\tmbstr.obj    $(OBJDIR)\utf8.obj     $(OBJDIR)\tidylib.obj

CFILES= $(SRCDIR)access.c       $(SRCDIR)attrs.c        $(SRCDIR)istack.c \
        $(SRCDIR)parser.c       $(SRCDIR)tags.c         $(SRCDIR)entities.c \
        $(SRCDIR)lexer.c        $(SRCDIR)pprint.c       $(SRCDIR)clean.c \
        $(SRCDIR)localize.c     $(SRCDIR)config.c       $(SRCDIR)alloc.c \
        $(SRCDIR)attrask.c      $(SRCDIR)attrget.c      $(SRCDIR)buffio.c \
        $(SRCDIR)tagask.c       $(SRCDIR)fileio.c       $(SRCDIR)streamio.c\
        $(SRCDIR)tmbstr.c       $(SRCDIR)utf8.c         $(SRCDIR)tidylib.c

HFILES= $(INCLDIR)platform.h $(INCLDIR)buffio.h \
        $(INCLDIR)fileio.h $(INCLDIR)tidy.h $(INCLDIR)tidyenum.h

LIBHFILES= \
        $(SRCDIR)access.h \
        $(SRCDIR)attrs.h        $(SRCDIR)clean.h \
        $(SRCDIR)config.h       $(SRCDIR)entities.h     \
        $(SRCDIR)forward.h      $(SRCDIR)lexer.h        $(SRCDIR)message.h \
        $(SRCDIR)parser.h       $(SRCDIR)pprint.h       $(SRCDIR)streamio.h \
        $(SRCDIR)tags.h \
        $(SRCDIR)tmbstr.h       $(SRCDIR)utf8.h         $(SRCDIR)tidy-int.h

$(OBJDIR) :
        if not exist $(OBJDIR) mkdir $(OBJDIR)

$(BINDIR) :
        if not exist $(BINDIR) mkdir $(BINDIR)

$(OBJDIR)/libtidy.lib:  $(OBJFILES)
        $(LD) $(LIBFLAGS) $(OBJFILES) /OUT:$(OBJDIR)/libtidy.lib

$(BINDIR)/tidy.exe: ./console/tidy.c $(HFILES) $(OBJDIR)/libtidy.lib $(BINDIR)
        $(CC) $(CFLAGS) ./console/tidy.c $(NAMEFLAG)$(OBJDIR)/
        $(LD) $(LDFLAGS) $(OBJDIR)/tidy.obj $(LIBS) $(OBJDIR)/libtidy.lib /OUT:$(BINDIR)/tidy.exe

$(OBJFILES):    $(HFILES) $(LIBHFILES) $(CFILES) Makefile.vc6 $(OBJDIR)
        $(CC) $(CFLAGS) $(CFILES) $(NAMEFLAG)$(OBJDIR)/

$(BINDIR)/tab2space.exe:    ./console/tab2space.c $(BINDIR)
        $(CC) $(CFLAGS) ./console/tab2space.c $(NAMEFLAG)$(OBJDIR)/
        $(LD) $(LDFLAGS) $(OBJDIR)/tab2space.obj $(LIBS) /OUT:$(BINDIR)/tab2space.exe

clean:
# Folgendes lieferte "Zu viele Parameter - ..." also wurde es gesplittet
# -del $(OBJFILES) $(OBJDIR)\tab2space.obj $(OBJDIR)\tidy.obj $(OBJDIR)\libtidy.lib $(BINDIR)\tidy.exe $(BINDIR)\tab2space.exe
    -del $(OBJDIR)\access.obj
    -del $(OBJDIR)\attrs.obj
    -del $(OBJDIR)\istack.obj
    -del $(OBJDIR)\parser.obj
    -del $(OBJDIR)\tags.obj
    -del $(OBJDIR)\entities.obj
    -del $(OBJDIR)\lexer.obj
    -del $(OBJDIR)\pprint.obj
    -del $(OBJDIR)\clean.obj
    -del $(OBJDIR)\localize.obj
    -del $(OBJDIR)\config.obj
    -del $(OBJDIR)\alloc.obj
    -del $(OBJDIR)\attrask.obj
    -del $(OBJDIR)\attrget.obj
    -del $(OBJDIR)\buffio.obj
    -del $(OBJDIR)\tagask.obj
    -del $(OBJDIR)\fileio.obj
    -del $(OBJDIR)\streamio.obj
    -del $(OBJDIR)\tmbstr.obj
    -del $(OBJDIR)\utf8.obj
    -del $(OBJDIR)\tidylib.obj

    -del $(OBJDIR)\tab2space.obj
    -del $(OBJDIR)\tidy.obj
    -del $(OBJDIR)\libtidy.lib

    -del $(BINDIR)\tidy.exe
    -del $(BINDIR)\tab2space.exe

!IFDEF DEBUG
#   -del $(BINDIR)\tab2space.ilk   # NUR wenn /incremental:yes
    -del $(BINDIR)\tab2space.pdb
#   -del $(BINDIR)\tidy.ilk        # NUR wenn /incremental:yes
    -del $(BINDIR)\tidy.pdb
!ENDIF

    -rd $(OBJDIR)
    -rd $(BINDIR)

all:    $(OBJDIR)/libtidy.lib $(BINDIR)/tidy.exe $(BINDIR)/tab2space.exe

Der Autor distanziert sich ausdrücklich vom Inhalt aller externen Links und Verweise.
Er übernimmt keine Gewähr oder Haftung für
Vollständigkeit, Richtigkeit, Aktualität oder etwaige Schäden.