home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 2: PC
/
frozenfish_august_1995.bin
/
bbs
/
d09xx
/
d0959.lha
/
IntuiMake
/
IntuiMake.anl
< prev
next >
Wrap
Text File
|
1993-12-10
|
22KB
|
588 lines
IntuiMake v1.2
⌐ 1993 Bj÷rn E. Trost und Dirk O. Remmelt.
i. Rechte und Pflichten der Autoren
IntuiMake v1.2 wurde mit gr÷▀tm÷glicher Sorgfalt entwickelt und
getestet. Dennoch k÷nnen Fehler im Programm selbst und in mit
IntuiMake erzeugten Programmen nicht ausgeschlossen werden.
Die Autoren k÷nnen fⁿr solche Fehler nicht haftbar gemacht werden.
ii. Rechte und Pflichten des Benutzers
Mit IntuiMake wird Entwicklern ein Werkzeug zur Programmentwicklung
zur Verfⁿgung gestellt, mit dem sie ohne Probleme gr÷▀ere Programm-
projekte entwicklen k÷nnen. Dazu sind keine Vorkenntnisse erforderlich,
da IntuiMake, wie der Name ja schon sagt, nicht mit Skript-Dateien arbeitet,
wie sie sonst ⁿblich sind.
IntuiMake darf frei kopiert und in PD-Serien aufgenommen werden,
sofern der Verkaufspreis einer Diskette nicht DM 5,- ⁿbersteigt. Wird
IntuiMake in eine Serie aufgenommen, so bitten die Autoren um die
▄bersendung einer Kopie.
IntuiMake darf nicht rekompiliert oder in irgendeiner Form verΣndert
werden. Dies betrifft vor allem Copyrightmeldungen und Versionsnummern.
IntuiMake ist keine Shareware, es besteht jedoch die M÷glichkeit der
Registrierung. Registrierte Anwender erhalten Upgrades, eine mit TeX
gesetzte, ausfⁿhrliche Anleitung und einen umfassenden Support. Eine
Registrierkarte befindet sich als Datei `Register.txt' in diesem
Paket. Interessierte Anwender k÷nnen sie ausdrucken und absenden.
Natⁿrlich sind auch Zuschriften jeglicher Art ohne Registrierung
willkommen. Falls Rⁿckantwort gewⁿnscht wird, bitte das Rⁿckporto
beilegen.
iii. DerInhalt dieses Paketes
Dieses Softwarepaket sollte folgende Dateien enthalten:
╖ IntuiMake: Das ausfⁿhrbare Programm.
╖ IntuiMake.anl: Diese Anleitung.
╖ NewlookMake: Eine spezielle Version von IntuiMake.
╖ Register.txt: Registrierungskarte.
╖ example/first.c
╖ example/first_protos.h
╖ example/headerfile.h
╖ example/makefile
╖ example/main.c
╖ example/second.c
╖ example/second_protos.h
╖ example/test
╖ example/obj/first.o
╖ example/obj/main.o
╖ example/obj/second.o
1. Die Aufgaben eines Make
Ein Make dient dazu, ein aus mehreren Modulen bestehendes Programm
m÷glichst komfortabel zu kompilieren. Vor allem das Kompilieren eines
oderer mehrerer Module bei ─nderung eines Headerfiles soll automatisiert
werden.
IntuiMake ist in der Version 1.2 auf den Aztec-Compiler von Manx
ausgelegt.
2. Das Starten, ben÷tigte Dateien, etc.
IntuiMake ben÷tigt OS2.0, die ASL-library in LIBS: und sonst nichts.
StandardmΣ▀ig wird das Makefile unter dem Namen `makefile' im aktuellen
Verzeichnis erzeugt.
Gestartet wird IntuiMake am zweckmΣ▀igsten mit `Intuimake'. Die
Angabe eines Dateinamens wie z.B. `IntuiMake GenialesMake' ist
optional. IntuiMake verwendet dann das angegebene Makefile statt des
Standard-Makefiles im aktuellen Verzeichnis.
IntuiMake ÷ffnet daraufhin ein Fenster, das auf der Workbench verschieb-
und in der Gr÷▀e verΣnderbar ist.Die Einstellungen des Makefiles
werden nun nachgeladen und IntuiMake ist einsatzbereit.
Es ist nicht sinnvoll, IntuiMake von der Workbench aus zu starten, da
die Ausgaben des Compilers und Linkers nicht umgeleitet werden. Man
sollte also mit einer ge÷ffnete CLI/Shell und IntuiMake gleichzeitig
arbeiten. Zum Glⁿck hat dieser unser Rechner ein Multitasking-
Betriebssystem.
3. Der Bildschirm nach dem Starten.
Nach dem Starten und Einladen des eventuell vorhandenen Makefiles ÷ffnet
sich das Hauptfenster. Der gr÷▀te Teil beansprucht ein Anzeigefeld fⁿr sich,
in dem alle Module, die zum Programm geh÷ren, dargestellt werden.
Darunter befinden sich die Systemsymbole zum Starten des Kompilier- und
Linkvorgangs, zum Starten eines Editors, zum Ausfⁿhren und Debuggen des
Programms.
Der rechte Teil des Bildschirm besteht aus Eingabefeldern fⁿr Symbolnamen,
Namen der zu erzeugenden Dateien, Versionsnummer und einem Schalter
zum Aktivieren der Debuginformationen.
Das Fenster kann beliebig vergr÷▀ert und auf dem Bildschirm positioniert
werden. Diese Einstellungen werden im Makefile gespeichert.
4. Die Menⁿs
4.1 Project
4.1.1 Save makefile
Hiermit kann ein erstelltes Makefile abgespeichert werden. Als
Filename wird `makefile' bzw. der beim Start angegebene Name
verwendet.
4.1.2 Save makefile as ...
Manchmal ist es sinnvoll, mit mehreren verschiedenen Makefiles zu
arbeiten. Dann kann man mit diesem Menⁿpunkt mit Hilfe des
ASL-Dateiauswahlfensters einen geeigneten Namen festlegen.
4.1.3 Load makefile ...
Um ein Makefile wΣhrend der Laufzeit zu laden, selektiert man
diesen Menⁿpunkt und wΣhlt im ASL-Dateiauswahlfenster das
gewⁿnschte Makefile an.
4.1.4 Delete objectfiles ...
Die Aufgabe eines Make's ist es, m÷glichst viele Schritte zu
automatisieren. Nun gibt es jedoch Dinge, die eine Kompilation
eines Moduls erfordern, ohne da▀ IntuiMake dies erkennen wⁿrde, wie
z.B. das Kopieren eines Σlteren Moduls zu den aktuellen Modulen. Um
das betreffende Modul dennoch kompilieren zu lassen, kann man die
erzeugte Objektdatei l÷schen. Dies kann man mittels Mehrfachauswahl
(Shift-Taste gedrⁿckt halten) im ASL-Dateiauswahlfenster erledigen.
4.1.5 Edit preferences ...
Im Voreinstellungsfenster k÷nnen viele Einstellungen vorgenommen
werden:
4.1.5.1 Comparing
IntuiMake bietet die M÷glichkeit, zwei SΣtze von Modulen zu
vergleichen, z.B. um Unterschiede zu einer alten Version
festzustellen. Dazu mⁿssen die beiden Pfade eingegeben werden,
in denen sich die ModulsΣtze befinden. Im Eingabefeld `Output'
wird die Ausgabedatei festgelegt.
4.1.5.2 Scanning
Die automatische Suche nach AbhΣngigkeiten kann beschleunigt
werden, indem man in den Dateien nach den `#include'-Anweisungen
eine Zeichenfolge, in Kommentaren, angibt, die das Ende der
`#include'-Anweisungen signalisiert.
Diese Zeichenfolge kann mit `EndString' angegeben werden.
Eine Zeichenfolge, mit der der Beginn der Durchforstung angegeben
werden kann, kann man im Eingabefeld `BeginString' festlegen. Ob
diese Zeichenfolge auch genutzt werden soll, kann mit dem Schalter
daneben bestimmt werden. Diese Zeichenfolgen k÷nnen fⁿr Assembler-
und C-Dateien getrennt eingestellt werden.
Fⁿr zukⁿnftige Erweiterungen gedacht sind die BlΣttersymbole,
mit denen die Syntax festgelegt wird, mit der Dateien included
werden. Dies dient vor allem der Unterscheidung von Headerdateien,
die mit `<...>', also Systemheaderdateien, und mit `"..."', also
Projektheaderdateien, included werden.
4.1.5.3 Paths
Mit dem BlΣttersymbol kann man bestimmen, ob eine ausfⁿhrbare
Datei oder eine Linker-Bibliothek erzeugt werden soll. Soll eine
Linker-Bibliothek erzeugt werden, mⁿssen sich die von Manx
mitgelieferten Programme `Lb' und `Ord' im Suchpfad befinden.
Im Hauptfenster kann man mit `Edit' das aktuelle Modul edieren. Dazu
mu▀ im Eingabefeld `Editor' der verwendete Editor, z.B. `Ced',
eingetragen werden.
Soll eine vorkompilierte Headerdatei benutzt werden, so ist sie
hier im Eingabefeld `-hi file' anzugeben. Soll sie auch in den
Kompiliervorgang eingebunden werden, so mu▀ die -hi Options bei
den Compiler-Optionen aktiviert sein.
Um alle Module, die Headerdateien und das Makefile zu archivieren
ist das Eingabefeld `Archive' vorhanden. Hier mu▀ die Datei
angegeben werden, in die das Archiv geschrieben werden soll.
Im Eingabefeld `Sourcecode' ist der Pfad einzutragen,
in dem sich die Module befinden. Die erzeugten Objektdateien
k÷nnen auf Wunsch in ein Verzeichnis geschrieben werden, das
im Eingabefeld `Objectcode' festgelegt wird.
4.1.6 Edit linkeroptions ...
Hier kann man die Optionen fⁿr den Linker eingeben. Sie sind im
Handbuch genau erklΣrt. In das Eingabefeld `Additional modules'
werden die Bibliotheken und Module eingetragen, die nicht in der
Modulliste vorkommen, z.B. `-lmf -lc'.
4.1.7 About ...
Es erscheint ein mit MaxonPAINT erstelltes Informationsfenster.
4.1.8 Quit
Verlassen von IntuiMake.
4.2 Action
4.2.1 Make ...
Hiermit wird der Kompilier- und Linkvorgang gestartet. Es erscheint
ein Fenster, das das Modul anzeigt, das zur Zeit kompiliert wird.
Mit dem Symbol zum Schlie▀en des Fensters kann das Kompilieren
abgebrochen werden. Dann, oder bei Fehlern wΣhrend des Kompilierens,
kann man mit dem Symbolen `Edit' die fehlerhafte Datei ediert
werden. `Retry' beginnt den Kompiervorgang an der abgebrochenen
Stelle. `Next' beginnt mit dem nΣchsten Modul, `Make' schlie▀lich
beginnt von vorne.
4.2.2 Edit
Startet den in den Voreinstellungen eingestellten Editor mit
dem aktuellen Modul. Mit einem Doppelklick auf das Modulauswahlfeld
kann ebenfalls eine Datei editiert werden.
4.2.3 Run
Startet das erzeugte Programm.
4.2.4 Debug
Startet den Debugger `sdb' von Manx.
Die oben aufgefⁿhrten Menⁿpunkte k÷nnen auch alle ⁿber die Symbole
unter dem Modulauswahlfeld aktiviert werden, was mit Sicherheit
schneller geht.
4.3 Modules
IntuiMake kann Module in C und in Assembler verwalten. Assemblermodule
sollten die Endung `.asm' haben.
4.3.1 Insert modules...
Hier wΣhlt man mit Hilfe des ASL-Dateiauswahlfensters die Module
an, die zu dem zu erstellenden Programm geh÷ren. Eine
Mehrfachauswahl mit Hilfe der Shift-Taste ist m÷glich.
Auch zu einem spΣteren Zeitpunkt ist es m÷glich, Module zu bereits
bestehenden Modulen hinzuzufⁿgen.
4.3.2 Delete module
Wenn man diesen Menⁿpunk selektiert, wird das zur Zeit angezeigte
Modul gel÷scht.
4.3.3 Scan module
IntuiMake bietet die M÷glichkeit, abhΣngige Headerfiles eines
Moduls automatisch zu erkennen. Dazu wird das angewΣhlte Modul auf
`#include"' durchforstet. Es werden rekursiv die weiteren
Headerfiles durchsucht, bis alle AbhΣngigkeiten festgestellt worden
sind.
Um den Scan-Vorgang zu beschleunigen, bietet IntuiMake die
M÷glichkeit, bei Auffinden einer bestimmten Zeichenfolge den
Scan-Vorgang des Headerfiles oder Moduls abzubrechen. Dies ist
besonders bei gro▀en Modulen sinnvoll. Die Zeichenfolge kann
in den Voreinstellungen festgelegt werden und sollte nach allen
`#include'-Anweisungen stehen.
4.3.4 Scan all modules
Hiermit werden alle Module nach abhΣngigen Headerfiles durchsucht.
Ein Abbruch ist durch Selektieren des Symbols zum Schlie▀en des
Fensters m÷glich.
4.3.5 Compare set of modules
Arbeiten an einem Projekt mehrere Autoren an mehreren Rechnern,
mⁿssen die geΣnderten Module irgendwann zusammengefⁿgt werden.
Zu diesem Zweck bietet IntuiMake die M÷glichkeit an, alle
eingetragenen Module auf ─nderungen zu untersuchen. Es wird das
Programm `Diff' aufgerufen, das dem Aztec-Compiler beiliegt.
In den Voreinstellungen mⁿssen die Pfade festgelegt werden, in
denen sich die zwei zu untersuchenden ModulsΣtze befinden.
Die Module werden bei Anwahl dieses Menⁿpunktes auf ─nderungen
untersucht und das Ergebnis in die angegebene Datei geschrieben.
4.3.6 Archive set of modules
Mit dem Programm `Lha', das sich im aktuellen Suchpfad befinden mu▀,
werden bei Anwahl dieses Menⁿpunktes alle Moduldateien, Headerdateien
und das Makefile gespeichert. Dazu mu▀ in den Voreinstellungen
im Eingabefeld `Archive' ein Dateiname angegeben werden.
4.3.7 Edit options
Um die Optionen zum Kompilieren oder Assemblieren einzustellen,
wΣhlt man diesen Menⁿpunkt an. IntuiMake bietet bis zu fⁿnf
beliebig programmierbare Voreinstellungen (Default) und eine
modulspezifische Einstellung (Custom) an. Die Default-Einstellungen
gelten fⁿr alle Module, die diesen Default eingestellt haben, wΣhrend
die modulspezifische Einstellung nur fⁿr das augenblickliche Module
gelten.
Um eine Default-Einstellunge zu Σndern Σndert man einfach die
Einstellungen und selektiert `As default'.
5. Defines
An den Compiler kann man Defines ⁿbergeben. IntuiMake unterstⁿtzt
bis zu fⁿnf solcher Symbole, die in die Eingabefelder eingetragen
werden k÷nnen. Mit dem Schalter links des Eingabefeldes kann man
festlegen, ob der Define ⁿbergeben wird. Dies ist dann sinnvoll,
wenn man im Programm eine Abfrage, wie z.B.
#ifdef DEMO
Save ();
#else
puts ("Demoversion!");
#endif
hat
6. Erstellen eines Projektes
In diesem Abschnitt soll beschrieben werden, wie man IntuiMake
konfiguriert und anschlie▀end damit arbeitet. Zu diesem Zweck
ist im Programmpaket von IntuiMake ein Beispielprojekt enthalten,
das aus drei Modulen besteht, die miteinander verknⁿpft sind.
6.1 Ein Beispiel
Hier sind nun die Module:
/* main.c
**
**
*/
#include "first_protos.h"
#include "second_protos.h"
/* SCAN_END */
void main (void)
{
Test1 ("Test it:", 1);
Test2 ("Just do it:");
}
/* headerfile.h
**
** SCAN_END
*/
struct MyStruct
{
int a;
long b;
};
/* first.c
**
**
*/
#include "headerfile.h"
/* SCAN_END */
void Test1 (char *message, long var)
{
struct MyStruct mystruct = {1, 2L};
printf ("%s %d\n%d\n%d\n", message, mystruct.a, mystruct.b, var);
}
/* second.c
**
**
*/
#include "headerfile.h"
/* SCAN_END */
void Test2 (char *message)
{
struct MyStruct mystruct = {3, 4L};
printf ("%s %d\n%d\n", message, mystruct.a, mystruct.b);
}
/* first_protos.h
**
** SCAN_END
*/
void Test1 (char *message, long var);
/* second_protos.h
**
** SCAN_END
*/
void Test2 (char *message);
In `headerfile.h' wird eine Struktur `MyStruct' definiert, die
in den Modulen `first' und `second' ben÷tigt wird. Sie mu▀ dort
also included werden. `main' ben÷tigt diese Struktur nicht. Hier
werden jedoch die Prototypdeklarationen der verwendeten Funktionen
`Test1' und `Test2' ben÷tigt. Also mⁿssen `first_protos.h' und
`second_protos.h' included werden.
Somit sind die AbhΣngigkeiten klar, bei einer ─nderung einer Datei,
von der andere anhΣngig sind, mⁿssen diese alle neu kompiliert
werden. Hier nun das Schaubild, aber keine Angst, man braucht bei
IntuiMake keine Schaubilder zu malen, das hier soll nur der
Verdeutlichung dienen:
(a -----> b bedeutet, da▀ b von a abhΣngig ist.)
first_protos.h -----> main.c <----- second_protos.h
first.c <----- headerfile.h -----> second.c
─ndert man z.B. die Funktion `Test1' in
void Test1 (char *message1, short var)
um, mu▀ auch die zugeh÷rige Datei `first_protos.h" geΣndert werden.
Das bewirkt, da▀ main.c neu kompiliert werden mu▀, da sich der
Aufruf von `Test1' geΣndert hat. Second.c mu▀ nicht kompiliert
werden.
─ndert man in `headerfile.h' die Struktur `MyStruct' um, z.B. in
struct MyStruct
{
short a;
long b;
};
so mⁿssen `first.c' und `second.c' kompiliert werden, da sie beide
auf `MyStruct' zugreifen. `main.c' ben÷tigt diese Struktur nicht
und mu▀ daher nicht kompiliert werden.
Soweit die n÷tigen ErlΣuterungen. Und nun das sch÷ne daran: Das
alles mu▀ man sich nicht merken, diese Arbeit wird von IntuiMake
erledigt.
6.2 Die Einstellungen fⁿr obiges Beispiel
Um aus den Quelltexten ein lauffΣhiges Programm zu generieren, sind
zunΣchst einige Schritte zu erledigen, die hier beschrieben werden:
ZunΣchst mu▀ IntuiMake aus dem CLI/Shell aufgerufen werden:
<IntuiMake> bzw. <run IntuiMake>
Nach erfolgreichem Starten mⁿssen dann die Module eingetragen
werden. Dazu wΣhlt man den Menⁿpunkt `Modules/Insert modules ...'
an. Es erscheint das ASL-Auswahlfenster, mit dem man mit gedrⁿckter
Shift-Taste die Dateien auswΣhlt, die zum Programm geh÷ren. In
obigem Beispiel also `main.c', `first.c' und `second.c'. Die
Header- und Prototypdateien dⁿrfen nicht angewΣhlt werden.
Die gewΣhlten Dateien erscheinen nun alphabetisch geordnet im
Modulauswahlfenster. Dort k÷nnen sie auch spΣter angewΣhlt werden.
Als nΣchstes legt man die Compileroptionen fest, die jedes Modul
ben÷tigt: Man wΣhlt das Modul im Anzeigefenster aus, fⁿr das man
die Optionen festlegen m÷chte. Sodann wΣhlt man
`Modules/Edit options' an. Es erscheint ein Fenster mit allen
m÷glichen Optionen, deren Bedeutung man im Handbuch zum Aztec-
Compiler nachschlagen kann.
Mit dem BlΣttersymbol kann man aus fⁿnf Voreinstellungen die
richtigen wΣhlen, oder fⁿr das Modul eigene bestimmen. Die
Voreinstellungen sind sinnvoll, wenn man fⁿr einen Teil seiner
Module die gleichen Optionen verwendet. Dann legt wΣhlt man
die Voreinstellung an, die programmiert werden soll, stellt die
Optionen wie gewⁿnscht ein und klickt auf `As default'. Die
Optionen werden dann gespeichert und sind dann auch in den
anderen Modulen verwendbar.
Sind die Optionen festgelegt, trΣgt man im Eingabefeld die
Versionsnummer des Programms ein, z.B. `1.2'. IntuiMake erzeugt
automatisch einen systemkonformen Versionstring.
Darunter legt man den Name des Programms fest, das erzeugt werden
soll.
Schlie▀lich mu▀ nach mit `Project/Edit linker options ...' das
Fenster zum Einstellen der Linkeroptionen ge÷ffnet werden.
Fⁿr obiges Beispiel mu▀ im Eingabefeld `Additional modules;
noch `-lc' eingetragen werden, damit die von Manx mitgelieferte
l-Bibliothek mitgelinkt wird.
Sind alle Einstellungen soweit durchgefⁿhrt, mu▀ man mit
`Modules/Scan all modules ...' die Module nach AbhΣngigkeiten
durchforsten. Ist dies erledigt, sollte man mit
`Project/Save makefile' das eben erzeugte Makefile abspeichern.
Nun kann mit `Action/Make' der Kompilier- und Linkvorgang
gestartet werden.
Es erscheint ein Ausgabefenster, im dem angezeigt wird, wie
viele Module bereits kompiliert wurden. Trat wΣhrend das
Kompilierens ein Fehler auf, kann mit `Edit' der Fehler beseitigt
und mit `Retry' ein neuer Versuch unternommen werden.
Nach erfolgreichem Kompilieren kann mit `Run' das Programm
gestartet werden.
7. Wann mu▀ ein Module neu kompiliert werden?
Nachfolgend eine Liste der Ereignisse, die dazu fⁿhren, da▀ ein
Modul kompiliert werden mu▀:
╖ Es existiert keine Objektdatei.
╖ Die Moduldatei wurde verΣndert.
╖ Eine Headerdatei, von der das Modul abhΣngig ist, wurde verΣndert.
╖ Der Zustand eines Defines hat sich verΣndert und der Define wird
im Modul verwendet.
I. Credits
Kein Programm, und sei es auch noch so schlecht, ohne Credits: Unser Dank
geht zunΣchst an die Firmen Commodore Business Machines Inc. und Commodore
Bⁿromaschinen GmbH fⁿr die zahlreichen undokumentierten SpΣ▀e, die sie sich
seit der Einfⁿhrung des Amiga erlaubt haben. Danke, Commodore!
Weiterhin mu▀ der Firma Manx Software Systems fⁿr die Mitlieferung eines
nichtfunktionierenden Make's, fⁿr eine maximale Schachtelungstiefe von 3
bei der Fragezeichenoperation und eine total veraltete Entwicklungsumgebung
gedankt werden. Danke, Manx!
Auf keinen Fall darf die Firma Frank Strau▀ Elektronik, Kaiserslautern,
vergessen werden, die ihre Kundenkartei gro▀zⁿgig an diverse Zeitungsverlage
weitergibt. Wie soll denn der Amiga-User auch sonst auf dem Laufenden
betreffend PC-Markt bleiben. Danke, FSE!
Und nochmal ein dickes Dankesch÷n an FSE fⁿr die sang- und klanglose
Einstellung des Amiga-Supports. Danke, FSE!
Aber genug des Zynischen, ein ganz gro▀es Dankesch÷n an Maxon Computer,
Eschborn, fⁿr einen vorbildlichen Entwicklersupport. Danke, Maxon.
II. 44,1 kHz
╖ Badesalz: Och joh!
╖ Badesalz: Nicht ohne meinen Pappa
╖ Badesalz: DiWoDaSo
╖ Eric Clapton: Unplugged \ `Boah, was'n Brett, unn die Giddar,
╖ Bruce Springsteen: (Un)Plugged | wie de Hendrix. Waahnsinn.'
╖ Neil Young: Unplugged /
╖ Emerson, Lake & Palmer: Live at the Royal Albert Hall
╖ Rush: Exit...stage left
╖ Deep Purple: Made in Japan
╖ Toto: Absolutely live
III. Epilog
Aufkommende Fragen, VerbesserungsvorschlΣge und Lobeshymnen an
Bj÷rn E. Trost
Auf dem BΣnnjerrⁿck 39
67663 Kaiserslautern
bzw.
Dirk O. Remmelt
Lutrinastra▀e 11
67655 Kaiserslautern
Kaiserslautern, im November 1993