Die make-Funktionalität dient der komfortablen Integration von Programmsystemen. Als Einsatzgebiet für die make-Funktionalität sind kleine bis mittlere Software-Projekte geplant, die ohne großen Verwaltungsaufwand für die Integration auskommen wollen.
Ein Programmsystem besteht aus Komponenten, wie z.B. Makros, Includes, Quellprogramme, Bindemodule, Großmodule, Phasen usw. Eine Komponente heißt abhängig, wenn sie aus anderen Komponenten erzeugt wird.
Bei Änderungen im Programmsystem müssen die abhängigen Komponenten neu erzeugt werden, um die Aktualisierung des Programmsystems zu gewährleisten. Häufig betrifft die Änderung mehrere Stufen.
Beispiel
Ein Bindemodul wird aus einem Quellprogramm und den verwendeten Makros erzeugt, ein Großmodul aus einer Reihe von Bindemodulen.
Wird ein Quellprogramm geändert, muss daraus der entsprechende Bindemodul neu erzeugt werden (Übersetzung).
Anschließend muss der Großmodul, der diesen Bindemodul enthält, neu erzeugt werden.
Danach muss die Phase, die diesen Bindemodul enthält, neu erzeugt werden.
Mit der make-Funktionalität kann ein Programmsystem so integriert werden, dass nur die Komponenten des Programmsystems neu erzeugt werden, die von einer Änderung betroffen sind.
Für den make-Lauf sind folgende Voraussetzungen zu überlegen:
Welche Komponente ist von welcher abhängig?
Nach welchen Regeln werden die abhängigen Komponenten erzeugt?
Diese Informationen werden in den make-Subanweisungen (siehe nächste Seite) abgelegt. Dort werden auch die Regeln, im Folgenden Aktionen genannt, vereinbart (siehe "Aktionen").
Zulässige Komponenten für die make-Funktionalität sind Bibliothekselemente und Dateien. Eine abhängige Komponente muss neu erzeugt werden, wenn sie älter ist als eine der Komponenten, von denen sie abhängt. Dabei gilt der Zeitpunkt der letzten Änderung einer Komponente:
bei Bibliothekselementen gilt MODIFICATION-DATE/-TIME als Änderungszeitpunkt,
bei Dateien gilt LAST-CHANGE-DATE als Änderungszeitpunkt.
Der Änderungszeitpunkt liegt in der ortsüblichen gesetzlichen Landeszeit vor.
Starten von make
Die make-Funktionalität wird mit der Anweisung BEGIN-MAKE angestoßen. Dort wird die Zielkomponente (TARGET) festgelegt und eine Prozedur erzeugt, die die Folgeverarbeitung regelt. Nach BEGIN-MAKE werden make-Subanweisungen erwartet.
make-Subanweisungen: Abhängigkeiten beschreiben und Aktionen definieren
Die Subanweisungen legen die Abhängigkeiten unter den Komponenten fest und definieren Aktionen. Die Aktionen beschreiben, wie aus den Ausgangskomponenten eine Zielkomponente erzeugt wird. Sie werden in der bei BEGIN-MAKE angegebenen Prozedur abgelegt.
Folgende Subanweisungen für make stehen zur Verfügung:
MODIFY-MAKE-DEFAULTS SET-STD-ACTION | ändert make-lokale Voreinstellungen. legt Abhängigkeiten zwischen einzelnen Objekten fest, |
SET-DEPENDENCY | legt die Abhängigkeiten zwischen den einzelnen |
SET-PREPROCESSING | definiert die Aktionen, die am Anfang der erzeugten |
SET-POSTPROCESSING | definiert die Aktionen, die am Ende der erzeugten |
Beenden von make
Die make-Subanweisung END-MAKE beendet die Folge der Subanweisungen und veranlasst die Folgeverarbeitung. Die Folgeverarbeitung generiert üblicherweise eine Prozedur und führt sie aus.
Schematische Übersicht über die make-Verarbeitung
Es gibt zwei Wege, ein Programmsystem zu „aktualisieren“:
durch Neu-Erzeugen der durch die Änderung veralteten Komponenten
durch „touch“, d.h. bei den veralteten Komponenten wird nur die Änderungszeit aktualisiert (siehe "TOUCH").
Bild 9 zeigt eine schematische Übersicht über die make-Verarbeitung.
Es sei ein Programmsystem mit seinen Komponenten gegeben, in dem die Zielkomponente Z1 aus den Ausgangskomponenten A1 und A2 erzeugt wird.
Wird die Ausgangskomponente A1 verändert, muss die davon abhängige Komponente (Zielkomponente Z1) neu erzeugt werden. Der make-Lauf muss also mit der Zielkomponente Z1 aufgerufen werden. Durch den make-Lauf wird zum einem beschrieben, welche Komponenten von der Ausgangskomponente A1 abhängen und zweitens, welche Aktionen zur Erzeugung der abhängigen Komponente notwendig sind.
Nach Beendigung des make-Laufs wird die erzeugte Prozedur ausgeführt, die die Aktionen enthält. Nachdem die abhängige Komponente Z1 einen älteren Änderungszeitpunkt als die Komponente A1 besitzt, wird sie gemäß den in der Prozedur enthaltenen Aktionen aktualisiert.
In Bild 9 bedeuten:
(1) | Die Komponente Z1 ist abhängig von den Komponenten A1 und A2. Die Komponente A1 wird verändert. Der make-Lauf wird in LMS mit der Zielkomponente Z1 aufgerufen. |
(2) | In den make-Subanweisungen während des make-Laufs (BEGIN-MAKE bis END-MAKE) wird festgelegt, dass die Komponente Z1 eine abhängige Komponente von A1 ist. Zudem werden Aktionen vereinbart, wie Z1 aus A1 erzeugt wird. |
(3) | Die Prozedur wird nach Ende des make-Laufs (nach der Eingabe der Anweisung END-MAKE) ausgeführt. |
(4) | Durch „touch“ werden die Änderungszeitpunkte der Komponenten auf den neuesten Stand gebracht, ohne deren Inhalt zu ändern. |
(5) | Das aktualisierte Programmsystem mit der neu erzeugten Komponente Z1. |