home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
CS46.ZIP
/
GERMAN.DOC
< prev
next >
Wrap
Text File
|
1990-07-17
|
18KB
|
474 lines
CS 4.6 - Compiler Shell - (c) Kai Uwe Rommel - Mar 27 1990
1. Einleitung
-------------
CS ist ein Steuerprogramm für den Microsoft Macro Assembler (ab 5.00),
den C Compiler (ab 5.00), Pascal Compiler (ab 4.00), FORTRAN Compiler
(ab 4.0), den Windows Resource Compiler (ab 2.00) und den Presentation
Manager Resource Compiler sowie die Dienstprogramme LINK (ab 5.00), ILINK
BIND, EXE2BIN, CVPACK, LIB (ab 3.08) und CREF.
CS nimmt dem Benutzer die Eingabe ständig benutzter Optionen und
Kommandos ab, sucht selbständig Dateien in festgelegten Verzeichnissen
und führt Compilerläufe nach einer "MAKE"-Strategie durch.
CS ist eine Family-Application und läuft sowohl unter DOS als auch
unter OS/2 (Real und Protected Mode).
Es können folgende Ausgabedateien erzeugt werden:
a) Real Mode Programme
- DOS EXE-Format
- DOS COM-Format
- DOS Windows EXE-Format (auch DLL's)
b) Protected Mode Programme
- OS/2 EXE-Format (auch DLL's und Presentation Manager)
- Bound EXE-Format (Family-Applications für OS/2 und DOS bzw. DOS box)
(Das Erzeugen von Presentation-Manager-Programmen unterscheidet sich von
Standard-OS/2-Programmen nur durch Verwendung einer anderen Import-Library,
OS2.LIB, anstelle von DOSCALLS.LIB.)
c) Linker Maps
d) Listings
e) Object Libraries
2. Syntax
---------
Aufruf: CS argument*
argument = globalopt | fileset
fileset = filespec | '(' item* ')'
item = localopt | filespec
filespec = filename | filename '{' include* '}'
include = filename
Wobei: globalopt ε { -? -H -Am -Ff -Le -Sn -Oid
-C -L -E -N -B -I -X -P -M -LS -NS -NF }
m = Modell-Bezeichner S, M, C, L, H oder MT
f = Float-Typ E, 7, A oder D
e = Programtyp-Bezeichner R, C, P, PM, B, W oder L
id = Name der TOOLS.INI-Sektion mit den Compiler-Optionen
n = Stackgröße in Bytes (dezimal oder hex mit Präfix 0x)
filename = beliebiger DOS-Dateiname, alle Namen in einem Fileset in ()
müssen dieselbe Extension haben (C, PAS, FOR oder ASM)
localopt = beliebige Option für den Compiler, der zu der Extension
der Dateien in dem betreffenden Fileset gehört
Eingabedateien können die Typen C, PAS, FOR, ASM, OBJ, LIB oder RC
haben bzw. DEF (Linkerinformationen), BAD (Informationen für BIND über
an BadDynLink zu bindende Namen) oder CS (CS Projektdatei).
Um zusätzliche API-Libraries für BIND statt für LINK zu spezifizieren,
muß ein Ausrufezeichen unmittelbar an den Namen der Library angehängt
werden um sie von LINK-Libraries zu unterscheiden. Nach diesen BIND-
Libraries wird im PLIB-Pfad (siehe 5.1) gesucht.
Sollen für eine oder mehrere Quelldateien spezielle Optionen an den
betreffenden Compiler übergeben werden, so können diese zusammen mit
den jeweiligen Dateien in runde Klammern eingeschlossen werden. Für
jeden in () eingeschlossenen Satz Quelldateien wird ein eigener
Compilerlauf mit den angegebenen lokalen Optionen durchgeführt.
Zur Unterstützung der MAKE-Strategie kann zu jeder Quelldatei ein Satz
Dateien angegeben werden, von denen die Quelldatei abhängig ist (z.B.
Include-Dateien). Dieser Satz Dateien muß in {} eingeschlossen werden
und der Quelldatei unmittelbar folgen. Diese Dateien werden NUR für
die Durchführung der MAKE-Strategie berücksichtigt und sonst in
keinster Weise verwendet.
Werden in der Kommandozeile Dateien des Typs EXE, DLL, COM, MAP oder LST
angegeben, so werden dadurch die Namen der Ausgabedateien bestimmt und
(EXE/DLL/COM) ihr Typ festgelegt bzw. (MAP/LST) ihre Produktion ausgelöst.
Beispiel:
CS -lp haupt.c{def.h} prog.exe (mod1.c mod2.c -Gt) mod3.asm mod4.c mod5.pas
(Falls dies etwas kryptisch erscheint, so verdeutlicht das den Nutzen
von CS- Projektdateien, siehe später folgende Projektdatei-Version
dieses Beispiels.)
Wildcard-Expansion wird unterstützt, jedoch ist zu beachten, daß Namen,
die Wildcards enthalten, links und rechts durch Leerzeichen begrenzt
werden müssen.
Falsch: CS haupt.c (mod*.c -G2)
Richtig: CS haupt.c ( mod*.c -G2)
3. CS-Projektdateien
--------------------
Trifft CS in der Kommandozeile auf eine Datei mit dem Typ .CS, so wird
die Kommandozeile nicht weiter ausgewertet, sondern weitere Optionen
oder Dateinamen werden aus der betreffenden Datei gelesen. Die
CS-Dateien (= Projektdateien) können beliebig viele Zeilen enthalten.
Der Dateityp .CS kann bei Projektdateien auch weggelassen werden, d.h.
es reicht "CS name" falls name.CS im SOURCE-Pfad oder im aktuellen
Verzeichnis existiert. Projektdateien sind die EINZIGEN Dateien, deren
Typ in den CS-Argumenten weggelassen werden kann.
Für den Inhalt der CS-Dateien gilt dieselbe Syntax wie für die
Kommandozeilen- parameter, jedoch kann die Struktur eines Projektes auf
mehreren Zeilen über- sichtlicher festgehalten werden. Kommentarzeilen
müssen mit ; oder # beginnen.
CS-Projektdateien sind in erster Linie für umfangreichere Projekte
gedacht, bei denen () und/oder {} genutzt werden. Dann hat die
Projektdatei die Funktion eines MAKEfiles und erspart Tipparbeit.
CS-Projektdateien sind zudem weniger aufwendig zu schreiben und weniger
fehleranfällig als MAKEfiles.
Die CS-Datei für das obige Beispiel könnte etwa so aussehen:
; Projekt: xyz
; Stand: 1.4.1989
;
; Hauptmodul
haupt.c {def.h}
;
; Untermodule mit Zusatz-Optionen
(mod1.c mod2.c -Gt)
;
; Weitere Untermodule
mod3.asm
mod4.c
mod5.pas
;
; Ausgabe-Name für BOUND-Programm
prog.exe -lb
Falls an CS keine Parameter übergeben werden, oder die Parameter nur
Optionen bzw. zumindest keine Eingabedateien der Typen C, PAS, FOR, ASM
oder OBJ enthalten, so sucht CS im aktuellen Verzeichnis nach der Datei
PROJECT.CS. Wird diese Datei gefunden, so wird sie gelesen, als ob sie
als letzter Parameter an CS übergeben worden wäre. Das heißt, daß
Optionen wie z.B. -OCV die Anweisungen in PROJECT.CS beeinflussen
können. PROJECT.CS hat also eine ähnliche Funktione wie "makefile" für
das Programm Make aus UNIX o.ä. Tools.
4. Optionen
-----------
-Am Legt das Speichermodell für C und MASM fest, wobei für MASM das
Modell in Form eines Define-Symbols mit dem Namen "model"
übergeben wird, das noch in einem Statement der Art
"% .MODEL model"
ausgewertet werden muß. Für m sind S, M, C, L, H und MT gültig.
MT bezeichnet ein Custom-Modell zur Multithread-Programmierung
unter OS/2 (mit LLIBCMT.LIB).
-Le Bestimmt das Ausgabeformat des Linkers (e = R, C, W, P, PM, B oder L).
-LR -> Real-Mode-EXE für DOS
-LC -> Real-Mode-COM für DOS
-LW -> Real-Mode-Windows-EXE
-LP -> Protected-Mode-EXE für OS/2 (ohne Presentation Manager)
-LPM -> Protected-Mode-EXE für OS/2 (für Presentation Manager)
-LB -> Bound-EXE
-LL -> es wird nicht gelinkt sondern eine Library mit LIB erzeugt
-Ff bestimmt den Typ der Fließkommaarithmetik
-FE Emulator-Fließkommaarithmetik Dies bestimmt
-F7 Fließkommaarithmetik mit Koprozessor auch den Typ der
-FA alternative Fließkommaarithmetik Standardlibrary mit !
-FD Dezimalarithmetik (nur für Pascal wirksam)
-Oid Mit id werden die Compileroptionen eingestellt. Dazu wird in
TOOLS.INI nach eine Sektion mit dem Namen [CS-id] gesucht. Aus
dieser Sektion werden die Inhalte für die Environment-Variablen
CL, PL, FL, MASM und LINK aus den gleichnamigen Einträgen gelesen.
Die Länge von id ist auf max. 15 Zeichen beschränkt.
-Sn Definiert die Stackgröße, n kann dezimal oder 0xhex angegeben werden.
-C Compile only
-L Link only
-E Echo der Kommandos, bevor sie ausgeführt werden
-N Keine Ausführung der Kommandos, nur Anzeige
-B Abschalten der MAKE-Strategie
-X Linken ohne Standard-Libraries
-I Inkrementelles Linken
-P Aufruf von CVPACK, falls für CodeView gelinkt wird
-M Löst die Erzeugung einer Linker-Map (bei -LB auch Binder-Map) aus.
-LS Löst die Erzeugung eines Übersetzungs-Listings aus
-NF Verwendung vollständiger Pfadnamen der Quelltexte beim Übersetzen
(Sinnvoll bei Verwendung von CodeView, dieser findet dann die
Quelltexte auch dann, wenn sie nicht im aktuellen Verzeichnis stehen)
-NS Verwendung einfacher Dateinamen, falls die Quelldateien im aktuellen
Verzeichnis stehen
5. TOOLS.INI
------------
Die für CS erforderlichen Informationen über die konkrete Umbgebung
müssen in der Datei TOOLS.INI definiert werden. Diese Datei muß über
die Environment- Variablen INIT oder PATH auffindbar sein. Sie wird
auch vom Microsoft Editor und dem Microsoft Make Dienstprogramm
verwendet, die diese Datei über die Environment-Variable INIT suchen.
5.1. Sektion [CS]
-----------------
MODEL=<modell>
Mögliche Werte für <modell> sind die Worte SMALL, MEDIUM, COMPACT,
LARGE, HUGE oder MTHREAD.
EXETYPE=<typ>
Mögliche Werte für <typ> sind DEFAULT, DOS, COM, OS2, OS2PM, BOUND,
WINDOWS oder LIBRARY. Bei DEFAULT wird abhängig vom aktuellen Maschinenmodus
automatisch ein Real- oder Protected-Mode-EXE-Programm erzeugt.
Bei LIBRARY werden alle Objektdateien mit LIB in eine Library geschrieben.
FLOAT=<typ>
Mögliche Werte für die Fließkommaarithmetik sind EMULATOR, 80X87,
ALTERNATE oder DECIMAL.
OPTIONS=<id>
ID der Sektion mit den Default-Compileroptionen (siehe auch bei
Kommandozeilen- option -Oid). Die Länge von <id> ist auf max. 15 Zeichen
beschränkt.
STACK=<größe>
Legt die Standard-Stackgröße fest.
ILINK=<Optionen>
Damit werden die Optionen für LINK festgelegt, mit denen ein .EXE für
ILINK vorbereitet wird (sollte /PADC:x und /PADD:x enthalten, nicht aber
/INC).
NAMES=FULL oder NAMES=SHORT
Bei FULL werden beim Übersetzen vollständige Pfadnamen der Quelltexte
verwendet. (Sinnvoll bei Verwendung von CodeView, dieser findet dann die
Quelltexte auch dann, wenn sie nicht im aktuellen Verzeichnis stehen.)
Bei SHORT werden einfache Dateinamen verwendet, falls die Quelldateien im
aktuellen Verzeichnis stehen.
BUILD=NO oder BUILD=YES
Mit Build=Yes wird die MAKE-Strategie abgschaltet. Normalerweise sollte
mit BUIL=NO gearbeitet werden.
RAMDISK=<path>
Wird für <path> ein nichtleerer Pfadname angegeben (der in die RAMDISK
verweisen sollte), so werden vor dem Start eines Compilers die zu der
betreffenden Sprache gehörigen Include-Files dorthin kopiert, falls sie
dort noch nicht existieren. Siehe 4.3.
SOURCE=<pathlist>
Damit können Verzeichnisse angegeben werden, die automatisch nach
Quelldateien durchsucht werden, wenn CS sie nicht im aktuellen
Verzeichnis findet. SOURCE gilt für Dateien mit den Typen ASM, C, PAS, FOR,
DEF, BAD und CS.
OBJ=<pathlist>
Dto. für Objektdateien.
OUTPUT=<path>
Spezifiziert das Ausgabeverzeichnis für alle mit CS erzeugten Dateien.
<path> sollte nach Möglichkeit in die Ramdisk zeigen. Ausgabedateien
(EXE-, MAP-Files) können aber auch explizit Laufwerksbezeichnungen oder
Pfadnamen vorangestellt werden, damit wird OUTPUT für die betreffende
Datei dann ignoriert.
INCLUDE=<pathlist>
TMP=<path>
Diese Einträge spezifizieren die Inhalte der gleichnamigen Environment-
Variablen für die Compiler und den Linker und werden vor dem Aufruf der
Programme entsprechend gesetzt.
RLIB=<pathlist>
PLIB=<pathlist>
WLIB=<pathlist>
Diese Einträge spezifizieren den Inhalt der Environmentvariable LIB
beim Linken von Real-Mode-Programmen (DOS-EXE oder COM), Protected-
Mode-Programmen (OS2-EXE oder Bound-Programme) bzw. Windows-Programmen.
5.2. Sektionen [CS-id]
----------------------
Diese Sektionen enthalten die Einträge mit den gewünschten
Standard- optionen der gleichnamigen Programme.
Beispiel:
[CS-STD]
CL=-W3 -Zdep1 -J -G2s -Oxn
PL=-w3 -Zdz
FL=-W1 -Zd -FPi -G2s -Ox
MASM=-W2 -Ml -X -Zd
LINK=/BAT /NOIG /NOE
5.3. Sektionen [CS+ASM], [CS+C], [CS+FOR] und [CS+PAS]
------------------------------------------------------
In diesen Sektionen wird festgelegt welche Include-Files zu welcher
Sprache in das RAMDISK-Verzeichnis kopiert werden und wo sie zu
finden sind.
Die beliebig vielen Einträge je Sektion haben das Format:
FLAGFILE=SOURCE
wobei FLAGFILE den Namen einer Datei enthält, deren Existenz vor dem
Start des entsprechenden Compilers geprüft wird. Existiert diese Datei
nicht im RAMDISK-Verzeichnis, so werden die mit SOURCE angegebenen
Dateien dorthin kopiert. SOURCE muß einen vollständigen Pfad und ein
Dateimuster enthalten.
Beispiel:
[CS+ASM]
DOS.INC=C:\INCLUDE\*.INC
OS2.INC=C:\INCLUDE\OS2\*.INC
MACROS.INC=D:\INCLUDE\*.INC
6. Sonstige Eigenschaften
-------------------------
Falls der Linker einen Fehler meldet, so bleibt dessen Standard-Eingabe
(Response-Datei) unter dem Namen CS.INP im OUTPUT-Verzeichnis erhalten.
Mit Hilfe dieser Datei kann festgestellt werden, ob CS die richtigen
Objekt- Dateien und Libraries zum Linken angegeben hat.
Wenn der zu den Compilern bzw. zum Assembler gelieferte
Segmented-Executable Linker verwendet wird, so sollte zur Erzeugung von
Windows-Programmen das Statement "EXETYPE WINDOWS" in die DEF-Datei
aufgenommen werden, da die Vor- einstellung dieses Linkers "EXETYPE
OS2" ist. Dies ist dann notwendig, wenn das Programm keine
Resource-Datei benötigt, da sonst der Typ vom Resource Compiler
berichtigt wird.
Die Standard-Libraries von Microsoft C, Pascal und FORTRAN müssen
explizit den Mode-Suffix im Namen haben, wie z.B. CLIBCER.LIB,
CLIBCEP.LIB und CLIBCEW.LIB statt CLIBCE.LIB, LIBPASER.LIB statt
LIBPASE.LIB und z.B. MLIBFER.LIB statt MLIBFORE.LIB.
Obgleich CS den SOURCE Pfad nach Eingabedateien durchsucht, ist es
empfehlenswert, das aktuelle Verzeichnis auf die Quelltexte
einzustellen, da die Compiler nach Include-Dateien natürlich NICHT im
SOURCE Pfad suchen.
Beim Windows Resource Compiler ist dies sogar erforderlich, da dieser
keine vollständigen Pfadnamen akzeptiert. Die RES-Datei des
Resource-Compilers wird entgegen den sonstigen Regeln nicht im OUTPUT
Verzeichnis abgelegt sondern dort, wo auch die RC-Datei steht.
Der Windows Resource Compiler muß in RW.EXE umbenannt werden, damit
keine Namenskonflikte mit dem Presentation Manager Resource Compiler
entstehen. Dies gilt auch für den Preprozessor RCPP.EXE, der
entsprechend umbenannt werden muß. Dessen neuer Name muß in RW.EXE dann
gepatcht werden (falls auf einer Maschine beide verwendet werden).
7. Automatische Dateinamenswahl
-------------------------------
Werden keine Namen für die Ausgabedateien (EXE, MAP) angegeben, so
werden sie aus dem Namen der ersten übergebenen Datei gebildet.
Wird ein Protected-Mode- oder Bound-EXE-Programm erzeugt und ist keine
DEF- bzw. keine BAD-Datei angegeben, so sucht CS immer nach einer DEF-
bzw. BAD- Datei mit dem gleichen Namen und Pfad wie ihn die erste auf
der Kommandozeile oder in der CS-Datei angegebene Datei hat und
übergibt diese Dateien automatisch an LINK bzw. BIND, wenn sie
existieren.
Wird ein Windows-Programm erzeugt, so werden auf die gleiche Weise eine
DEF- und eine RC-Datei gesucht und mit verarbeitet.
Um Programme für den OS/2 Presentation Manager zu erzeugen, wird mit
-LPM wie für normale OS/2-Programme übersetzt, die DEF- und RC-Dateien
werden wieder automatisch gesucht und mit verarbeitet. Durch -LPM wird
statt DOSCALLS.LIB nun mit OS2.LIB gelinkt.
Weichen die Namen von RC-, DEF- und ggf. BAD-Datei vom Namen der ersten
Quelldatei ab, so sind sie explizit anzugeben.
Dies vereinfacht die Übersetzung von kleineren Single-Source-
Programmen, für die dann keine CS-Datei angelegt werden muß, wenn die
Zusatzdateien (DEF, BAD bzw. RC) den gleichen Namen haben wie die
Quelldatei (aber natürlich den richtigen Typ).
8. DLL's
--------
DLL's werden meist mit Speichermodellen wie -Asnu, -Asnw oder -Alfw
usw. erzeugt. Laut C Compiler User's Manual sind solche Modelle auch
mit einem Standardmodell und zusätzlich -Au oder -Aw erzeugbar. Es
sollte daher das entsprechende Standardmodell global an CS übergeben
werden (siehe unten) und -Aw oder -Au mit den betreffenden Quelldateien
in runde Klammern eingeschlossen werden. Folgende Standardmodelle
entsprechen den speziellen Speichermodellen:
-Asnw --> -AS -Aw dto. für -Au
-Asfw --> -AC -Aw
-Alnw --> -AM -Aw
-Alfw --> -AL -Aw
Um z.B. den Compileraufruf "CL -Asnw -G2s graflib.c" zu erreichen, muß
"CS -AS (-Aw -G2s graflib.c)" verwendet werden (bzw. sinngemäße
CS-Datei).
Für das Linken von DLL's ist u.U. die Option -X sinnvoll, wenn keine
Standardbibliotheken mitgelinkt werden sollen.
Für DLL's sind diverse Endungen üblich, für Windows wird meist .EXE verwendet,
für OS/2 meist .DLL. CS erlaubt die Angabe von .DLL alternativ zu .EXE.
Um andere Endungen zu erzeugen, muß die .EXE-Datei eben umbenannt werden.
In der DEF-Datei darf natürlich das LIBRARY-Statement statt des
NAME-Statements nicht fehlen.
9. Exit-Codes
-------------
CS gibt bei Beendigung folgende Codes an den Aufrufer zurück:
0 - erfolgreicher Ablauf
1 - es war nichts zu tun
2 - ein aufgerufenes Programm hat einen Fehler zurückgemeldet
(Compiler, Assembler, Linker ...)
3 - Syntaxfehler in der Kommandozeile oder einer Projektdatei (.CS)
4 - Konfigurationsfehler in TOOLS.INI
5 - eine benötigte Eingabedatei ist nicht vorhanden
6 - Ablauffehler von CS
(Speicher nicht ausreichend, E/A-Fehler ... )
256 - Abbruch durch den Benutzer
10. Einschränkungen
------------------
- seit Version 4.3 keine mehr :-)
außer daß die Parser/Scanner-Generatoren BISON und FLEX noch nicht
unterstützt werden.