Wissenschaftliches Programmieren

Ähnliche Dokumente
Wissenschaftliches Programmieren

Grundlagen der Informatik Vorlesungsskript

Wissenschaftliches Programmieren

U1 3. Übung U1 3. Übung. Die Kommandos auf den folgenden Folien dienen der Veranschaulichung. Sind nicht direkt auf die Übungsaufgabe übertragbar

Wissenschaftliches Programmieren

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

Computer und Software 1

Computer und Software 1

Kompilieren und Linken

Computer und Software 1

Grundlagen der Fortran Sprache

PROGRAMMIERKURS FORTRAN

Wissenschaftliches Programmieren

Compilieren und Linken von C- und C++-Dateien

Praktikumstermin B-07: make & Makefiles

Wissenschaftliches Programmieren

Wissenschaftliches Programmieren

Anleitung für zwei Fortran-Openmp-Beispiele auf der NWZSuperdome

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Programmentwicklung mit C++ (unter Unix/Linux)

Tag 4 Repetitorium Informatik (Java)

2 Eine einfache Programmiersprache

Bemerkungen zu den Übergabeparametern 2 FORTRAN gestattet auch, Funktionen als Übergabeparameter zu behandeln, sofern sie mit

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Unterprogramme, Pointer und die Übergabe von Arrays

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Einige Grundlagen zu OpenMP

Wissenschaftliches Programmieren

Mapra: C++ Teil 3. Felix Gruber, Michael Rom. IGPM, RWTH Aachen. 10. Mai 2016

Eine kleine Makefile Einführung

Programmiersprachen Einführung in C

Tag 4 Repetitorium Informatik (Java)

Grundlagen der Verwendung von make

Programmentwicklung ohne BlueJ

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Shell-Scripting Linux-Kurs der Unix-AG

Bash-Scripting Linux-Kurs der Unix-AG

Einführung in die C-Programmierung

Freelance DeltaPLC-Tool. Version 4 / Version 5

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

2 Eine einfache Programmiersprache

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Dr. Monika Meiler. Inhalt

Quelle: (aber dort nicht mehr verfügbar)

Installationsanleitung

Der Aufbau einer Quelltext-Datei. Anweisungen. - Header /Kopfzeile...program main

Continuous Integration mit TravisCI u.a. Jan Steemann

ANT. Kurzvortrag von Manuel Schulze.

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Bash-Skripting Linux-Kurs der Unix-AG

Debugging mit ddd (Data Display Debugger)

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

mod_ireport ESS Enterprise Solution Server Version 1.0 / Release 6.0 ESS Programmierbeispiele 1

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Bash-Skripting Linux-Kurs der Unix-AG

8.1 Vom Quellcode zur ausführbaren Programm

Programmieren in Haskell Debugging

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Eine C-orientierte Einführung in GNU make Version 0.8. Matthias Siemering Universität Osnabrück 27. Oktober 2003

Übung 1 - Betriebssysteme I

This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License.

Grundlagen der Informatik - 6. Praktikum

Funktionen in JavaScript

Vorsemesterkurs Informatik

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

HAUPT-UND UNTERPROGRAMME

Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung

... die Funktion Ñ Ò µ einer Klasse ÂÚÑ:

Eclipse Tutorial.doc

Programmieren von Java Smartcards

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Matlab. Alexandra Mehlhase & Felix Böckelmann. 26. Juni Analysetechniken in der Softwaretechnik Technische Universität Berlin SS 2008

Programmieren in C++ Templates

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Einstieg in die Informatik mit Java

Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Web-Techniken Einführung in JavaScript

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Objektorientiertes RPG 2-1. Objektorientiertes RPG

JUnit (Version 4.x) Framework zur Unterstützung von Unit-Tests. Wir verwenden nicht JUnit 3.x. Ideen dahinter. Test-Methode

Tag 7 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

GI Vektoren

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Softwarepraktikum: Einführung in Makefiles

Java: Eine kurze Einführung an Beispielen

Shell-Scripting Linux-Kurs der Unix-AG

Ant - das Java Build-Tool

Linux Kommandozeile: Einfache Skripte. 1 Wiederhohlung. 2 Einfache Skripte

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Softwareentwicklung I (IB) Blatt 5

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23

Algorithmen und Datenstrukturen I. Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Vorkurs Informatik WiSe 16/17

Transkript:

Wissenschaftliches Programmieren álint Aradi cms/people/b_aradi 7. Abhängigkeiten, akefiles Quellen: Info-eiten für GNU ake http://www.gnu.org/software/make/manual/make.html

Übergabe allokierbarer Arrays Allokierbare Felder müssen nur dann mit dem allocatable Attribut übernommen werden, wenn ihr Allokierungsstatus im Unterprogramm verändert werden soll: program main implicit none Allokierungstatus unverändert subroutine sub1(aa) integer, intent(inout) :: aa integer, allocatable :: array(:) aa = 1 allocate(array(10)) call sub1(array) call sub2(array) end program Allokierungstatus verändert end sub1 subroutine sub2(aa) integer, intent(inout), & &allocatable :: aa deallocate(aa) allocate(aa(20)) aa = 2 end sub2 remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/2)

ompilieren/linken Erstellung einer ausführbaren Datei besteht grundsätzlich aus zwei chritten: ompilieren der Quelldateien (Übersetzung in aschinenformat) Zusammenfügen (Linken) der nötigen Komponenten ompilieren Linken part1.f90 part2.f90 : partn.f90 part1.o part2.o : partn.o project ausführbare Datei (oder ibliothek) ereits compilierte externe Komponenten (z.. ibliotheken) Werden keine extra Optionen gesetzt, versucht der ompiler nach ompilieren alle angegebenen Komponenten, die entstandenen Objektdateien zu linken. gfortran a.f90 b.f90 ompiliert a.f90, b.f90 und linkt das Ergebnis. remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/3)

ompilieren Komponenten werden immer separat ompiliert, auch wenn sie alle als Kommandozeilenargument dem ompilier übergeben werden! gfortran -o myprog a.f90 b.f90 c.f90 äquiv. gfortran -c a.f90 gfortran -c b.f90 gfortran -c c.f90 gfortran -o myprog a.o b.o c.o ompilieren ohne Linken wird bei den meisten ompilern mit der Option -c erreicht: gfortran -c a.f90 Erzeugt Objektdatei a.o, Linken findet nicht statt. eim Linken müssen alle Objektdateien, die zum Projekt gehören aufgezählt werden. Wird kein Name für das Ergebnis (ausführbare Datei oder ibliothek) gesetzt (Option - o ), wird der Name a.out verwendet. In den meisten Fällen sollte zum Linken der ompiler (und nicht ln) verwendet werden, da er automatisch auch die benötigten compilerinterne ibliotheken anfügt. gfortran -o test a.o b.o äquiv. ln -o test a.o b.o /usr/lib/gcc/i686/libgfortran.a... remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/4)

ompilieren Quelldateien werden immer einzeln compiliert. eim ompilieren einer Datei hat der ompiler nur beschränkte (oder gar keine) Information über die anderen Komponenten! test.f90: program test implicit none real(8) :: i1 i1 = 3.0_8 call doublevalue(i1, 4) write (*,*) "i1 = ", i1 end program test sub.f90: subroutine doublevalue(val) implicit none keine Überprüfung integer, intent(inout) :: val von Anzahl und Typ der Parameter! val = 2 * val ubroutine außerhalb eines odules end subroutine doublevalue gfortran -c sub.f90 gfortran -c test.f90 gfortran -o test sub.o test.o./test Nicht deterministisch! remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/5)

odule Wenn die Unterprogramme in odulen definiert sind, ist die Überprüfung der Parameter gesichert test.f90: sub.f90: ubroutine innerhalb eines odules program test use sub implicit none real(8) :: i1 i1 = 3.0_8 call doublevalue(i1, 4) write (*,*) "i1 = ", i1 module sub implicit none Anzahl und Typ der contains Parameter wird überprüft! subroutine doublevalue(val) integer, intent(inout) :: val val = 2 * val end program test end subroutine doublevalue Unterprogramme sollten immer in odule gepackt werden. remen enter for omputational aterials cience end module sub gfortran -c sub.f90 gfortran -c test.f90 gfortran -o test sub.o test.o ompiler error: ad nr. of arguments ad argument type Wissenschaftliches Programmieren, 2015 (7/6)

ompilieren von odulen Wenn odule compiliert werden, wird extra Information über die chnittstelle gespeichert Diese Information wird bei der ompilierung jeglicher Komponenten eingelesen, die das odul via use einbinden. gausselim.f90: program gausselim use accuracy use eqsolver implicit none... accuracy.f90: module accuracy implicit none... eqsolver.f90: module eqsolver use accuracy implicit none... gfortran -c accuracy.f90 gfortran -c eqsolver.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o \ eqsolver.o gausselim.o Erzeugt accuracy.o und accuracy.mod Liest accuracy.mod Erzeugt eqsolver.o und eqsolver.mod Liest accuracy.mod und eqsolver.mod Erzeugt gausselim.o Liest keine chnittstelleninformationen chnittstellen -information remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/7)

ompilieren von odulen Reihenfolge bei ompilierung der odule wichtig: Quellcode eines odules muss compiliert werden, bevor das odul (via use ) benutzt werden kann. gfortran -c eqsolver.f90 gfortran -c gausselim.f90 gfortran -c accuracy.f90 gfortran -o gausselim accuracy.o \ eqsolver.o gausselim.o ompilerfehler: Fehlende odulinformation Der ompiler überprüft nicht, ob eine chnittstellendatei zur aktuellen Version des Quellcodes gehört: gfortran -c accuracy.f90 gfortran -c eqsolver.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o eqsolver.o gausselim.o emacs accuracy.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o eqsolver.o \ gausselim.o accuracy.f90 wird geändert ompiler liest altes accuracy.mod! (kein Fehler) chnittstellendateien sind Architektur, ompiler- (und sogar ompilerversion-) abhängig! remen enter for Wissenschaftliches Programmieren, 2015 (7/8) omputational aterials cience

ake tellt sicher, dass Komponenten in der richtigen Reihenfolge compiliert werden bzw. bei größeren Projekten nur die nötigen Komponenten nach einer Veränderung neu compiliert werden. Die Information über die Abhängigkeiten/Voraussetzungen muss vom enutzer definiert werden (eventuell mit entsprechenden Tools: z.. automake, cmake, etc.) Die Konfigurationsdatei für ake ist standardisiert: IEEE tandard 1003.2-1992 GNU ake benutzt zahlreiche Erweiterungen (sehr bequem, aber nicht transferabel) GNU ake kann praktisch für jede Architektur compiliert werden öglicher Name der Konfigurationsdateien: akefile makefile GNUmakefile Wird nur von GNU make eingelesen und von anderen ake Programmen ignoriert remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/9)

Einfaches akefile besteht aus Regeln: akefile Ziel(e): Voraussetzung1 Voraussetzung2... [TA]efehl Unix-efehl, wie man Ziel erzeugt Ziel/Ergebnis der Regel Ziele, die vor dem aktuellen Ziel schon bearbeitet sein müssen gausselim: accuracy.o eqsolver.o gausselim.o [TA]gfortran -o gausselim accuracy.o eqsolver.o gausselim.o Ziel ist meistens der Name der Datei, die erzeugt werden muss Voraussetzungen sind meistens Namen von Dateien, die vorhanden sein müssen, damit die Zieldatei erzeugt werden kann. efehle sind Unix-efehle, meistens ompiler- oder Linkeraufrufe, um Zieldatei zu erzeugen. remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/10)

akefile Ablauf Rekursiver Ablauf: Gibt es unbearbeitete Voraussetzungen? Ja Wende dieses Verfahren auf diese Voraussetzungen an Nein Nein Existiert Zieldatei schon? Ja Führe efehl aus, um Ziel zu erzeugen Ja ind Voraussetzungen neuer als Zieldatei? Nein Fertig mit diesem Ziel! gausselim: accuracy.o \ eqsolver.o \ gausselim.o [TA]gfortran \ -o gausselim \ accuracy.o \ eqsolver.o \ gausselim.o remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/11)

Regeln für das Gausselimination-Projekt: akefile akefile: gausselim: accuracy.o eqsolver.o gausselim.o io.o [TA]gfortran -o gausselim accuracy.o io.o eqsolver.o gausselim.o accuracy.o: accuracy.f90 [TA]gfortran -c accuracy.f90 eqsolver.o: eqsolver.f90 accuracy.o [TA]gfortran -c eqsolver.f90 gausselim.o: gausselim.f90 accuracy.o io.o eqsolver.o [TA]gfortran -c gausselim.f90 io.o: io.f90 accuracy.o [TA]gfortran -c io.f90 Wenn kein Ziel spezifiziert, fängt ake mit der ersten Regel an: make remen enter for omputational aterials cience gfortran -c accuracy.f90 gfortran -c io.f90 gfortran -c eqsolver.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o io.o eqsolver.o gausselim.o Wissenschaftliches Programmieren, 2015 (7/12)

akefile ake vergleicht den Zeitpunkt der letzten Veränderung der Voraussetzungen mit dem Zeitpunkt der Erstellung des Zieles (falls Ziel schon existiert) ei Veränderung werden nur jene Komponenten des Projektes neu compiliert, die von der veränderten Datei abhängen. 1. Projekt das erste al compiliert, es wird alles mitcompiliert make emacs io.f90 make gfortran -c accuracy.f90 gfortran -c io.f90 gfortran -c eqsolver.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o io.o eqsolver.o gausselim.o 2. Eine Datei des Projektes wird bearbeitet 3. Objektdateien von vorangehenden ompilieren noch da, nur abhängige Teile werden neu compiliert. gfortran -c io.f90 gfortran -c gausselim.f90 gfortran -o gausselim accuracy.o io.o eqsolver.o gausselim.o remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/13)

Variablen in akefile Im akefile können Variablen deklariert und verwendet werden Wertzuweisung mittels =, Verwendung: $(Variablenname) Kommentarzeilen können mit # eingefügt werden # ompiler, compiler options, linker, linker options F = gfortran FOPT = -O2 Zwecks Wiederverwendung sollten ompilername und LN = $(F) ompileroptionen bzw. Linkername und Linkeroptionen als LNOPT = Variablen deklariert werden! # Object files OJ = accuracy.o eqsolver.o gausselim.o io.o gausselim: $(OJ) [TA]$(LN) $(LNOPT) -o gausselim $(OJ) accuracy.o: accuracy.f90 [TA]$(F) $(FOPT) -c accuracy.f90 eqsolver.o: eqsolver.f90 accuracy.o [TA]$(F) $(FOPT) -c eqsolver.f90... remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/14)

eispiele für automatische Variablen: Automatische Variablen $@ Name des Zieles $< Name der ersten Voraussetzung $^ Name aller Voraussetzungen getrennt durch Leerzeichen Die Wertzuweisung der automatischen Variablen erfolgt durch ake Die Wertzuweisung wird bei jeder Verwendung neu wiederholt: gausselim: $(OJ) [TA]$(LN) $(LNOPT) -o $@ $^ accuracy.o: accuracy.f90 [TA]$(F) $(FOPT) -c $< eqsolver.o: eqsolver.f90 accuracy.o $(F) $(FOPT) -c $< $@ gausselim $^ $(OJ) $< accuracy.f90 $< solver.f90... remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/15)

Zusätzliche Voraussetzungen Wird eine Regel ohne efehl definiert, wird (werden) die angegebene(n) Voraussetzung(en)e als zusätzliche der Liste der Voraussetzungen angehängt. Wenn eine Regel mit efehl ausgewertet wird (um ein Ziel zu erzeugen), werden alle Voraussetzungen berücksichtigt. Zuerst diejenige, die in der den efehl enthaltenden Regel definiert sind, dann diejenige, die ohne efehl spezifiziert wurden. Die zusätzliche Voraussetzungen werden auch dann berücksichtigt, wenn sie erst nach der Regel mit ausführbarem efehl definiert sind! accuracy.o: accuracy.f90 [TA]$(F) $(FOPT) -c $< eqsolver.o: eqsolver.f90 [TA]$(F) $(FOPT) -c $< accuracy.o: eqsolver.o: accuracy.o ei der Auswertung wird die gesammte Voraussetzungsliste berücksichtigt: eqsolver.f90 und accuracy.o Verändert die Voraussetzungsliste von accuracy.o nicht Erweitert die Voraussetzungsliste von eqsolver.o mit accuracy.o remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/16)

Allgemeine Regeln Regel nach dem selben uster können zu einer allgemeinen Regel zusammangefasst werden. (z.. wenn für Dateien mit gleichem uffix immer die selbe Regel ausgeführt werden muss): %.o: %.f90 [TA]$(F) $(FOPT) -c $< accuracy.o: eqsolver.o: accuracy.o... Die zusätzlichen (individuellen) Voraussetzungen müssen weiterhin explizit definiert werden accuracy.o: accuracy.f90 [TA]$(F) $(FOPT) -c $< eqsolver.o: eqsolver.f90 [TA]$(F) $(FOPT) -c $<... Jede.o Datei setzt die Existenz einer entsprechenden.f90 Datei voraus, und muss in der spezifizierten Weise compiliert werden Ziel wird via usterabgleich gebildet, Wert für % wird dann in die Liste der Voraussetzungen eingesetzt '%' ist GNU-Erweiterung, tandarformat: remen enter for omputational aterials cience.f90.o: [TA]$(F) $(FOPT) -c $< Wissenschaftliches Programmieren, 2015 (7/17)

Unechte Ziele (phony targets) Unechtes Ziel (phony target) = Ziel, für das bei der Ausführung des zugehörenden efehls, keine Datei erzeugt werden sollte. Anwendung: Ausführung einer bestimmten Aktion (z.. Aufräumen): clean: [TA]rm -f *.o *.mod Wenn ake nicht mit der ersten Regel anfangen soll, muss das Ziel explizit als Kommandozeilenparameter spezifiziert werden: make clean rm -f *.o *.mod Normale Regel werden nicht ausgeführt, wenn eine Datei mit dem entsprechenden (zufällig) existiert. touch clean make clean make: `clean' is up to date. Unechte Regel müssen deshalb mit.phony: gekennzeichnet werden, damit sie auch dann ausgeführt, wenn eine Datei mit dem Zielnamen schon existiert..phony: clean remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/18)

Unechte Ziele (phony targets) #2 Unechte Ziele können selber Voraussetzungen haben (meistens andere unechte Ziele):.PHONY: clean realclean clean: [TA]rm -f *.o realclean: clean [TA]rm -f gausselim make realclean rm -f *.o rm -f gausselim remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/19)

Erfolgreiches eenden von ake: eenden von ake Wenn alle Voraussetzungen für das ausgewählte Ziel vorhanden sind oder erzeugt werden konnten, und zum ausgewählten Ziel gehörender efehl erfolgreich ausgeführt wurde. Abbruch mit Fehlermeldung: Wenn eine der Voraussetzung nicht existiert und keine Regel zur Erzeugung definiert wurden. Wenn während der Ausführung des efehlteils der bearbeiteten Regel ein Fehler aufgetreten ist (z.. ompiler bricht die ompilierung mit Fehler ab) remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/20)

Fortran 95 und ake Die Regeln im akefiles basieren auf Dateinamen Dateiname für eine.mod Datei wird durch den Namen des oduls bestimmt, das in der Datei definiert wird, und nicht durch den Namen der Datei, in der es definiert wird. test.f90 module Testodul : gfortran -c test.f90 test.o testmodul.mod Für Objektdateien aus F95-Quellcode müssen deswegen Voraussetzungen i.a. über.o und nicht über.mod Dateien spezifiziert werden! irgendwas.o: testmodul.mod Problematisch Es läßt sich keine einfache Regel konstruieren, welche Datei compiliert werden muss, damit tesmodul.mod entsteht. irgendwas.o: test.o esser Wenn test.o erstellt wird (aus test.f90) entstehen.mod Dateien für alle odule, die im test.f90 definiert sind. remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/21)

chwächen von ake: Alternativen zu ake eltsames Format (TA und Leerzeichen sehr leicht verwechselbar) Nicht 100% transferabel: efehle funktionieren nur in Unix-Umgebungen Alternativen zu ake: jam (http://www.perforce.com/jam/jam.html) Ant (http://ant.apache.org/) XL-basierte Konfigurationsdatei Java-basiert (braucht Java um zu laufen) ei Java-Entwicklungen de facto tandardtool Abstrakte Formulierung der Aufgaben, keine direkte Unix-efehle Unix-efehle können bei edarf eingefügt werden Außerhalb der Java-ommunity wenig verbreitet, gehört nicht zur tandardinstallation eines Unix-ystemes (ake ist praktisch immer dabei) ake (erzeugt makefiles für ake) ons Waf : remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/22)

emerkungen zu ake ake wertet zuerst den gesammten Abhängigkeitsbaum aus, und fängt erst dann mit der Erstellung der einzelnen Komponenten in der richtigen Reihenfolge. Komponenten, die nicht voneinander abhängen können parallel bearbeitet werden. (Zeitersparnis beim ompilieren großer Projekte auf P-aschinen) make -j2 1. accuracy.o Anzahl der parallelen ake-threads 2. 3. io.o gausselim.o eqsolver.o 4. gausselim ake kann für jedes Projekt verwendet werden, wo die Reihenfolge verschiedener Aktionen über Dateiabhängigkeiten sich ausdrücken lassen. remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/23)

Aufgabe chreiben ie ein akefile für das Gauss-Elimination-Projekt: 'make' soll das Program compilieren 'make clean' soll intermediäre Dateien (Objektfiles, mod-dateien) löschen 'make realclean' soll 'clean' ausführen und zusätzlich die ausführbare Datei löschen ompiler, ompileroptionen, Linker, Linkeroptionen sollten in Variablen gespeichert werden. tellen ie sicher, dass die Abhängigkeiten richtig definiert worden sind. (achen ie Veränderungen in einzelnen Quellcodedateien, und vergewissern ie sich, dass beim Neucompilieren nur die nötigen Komponenten neu compiliert werden.) chreiben ie in die READE-Datei, wie man das Programm kompiliert. hecken ie das akefile in das Repository ein. remen enter for omputational aterials cience Wissenschaftliches Programmieren, 2015 (7/24)