Make Make. Manuelle Rekompilation: Automatisier ung erforder t Infor mation Makefile: Konfigurationsdokument. Zuviel rekompilieren: Zeitverschwendung

Ähnliche Dokumente
GNU make. Christian Helebrant. OO-Get-Together, 4. September 2006 FLC. C. Helebrant (FLC) GNU make OO-Get-Together,

Inhalte der Vorlesung. 7.Übersetzungssteuerung mit make. Motivation. 7. Übersetzungssteuerung mit make

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

GNU Make Kurzreferenz

Ein-Ausgabefunktionen in C (letzter Abschnitt Vorlesungsstoff ab C.110)

Grundlagen der Informatik Vorlesungsskript

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

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

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

Computer & GNU/Linux Einführung Teil 4

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

Bedienungshinweise für XEmacs, make und GNU Debugger

Quelle: (aber dort nicht mehr verfügbar)

UNIX/Linux Lösung. Mär 18, 18 15:34 Seite 1/6

Softwarepraktikum: Einführung in Makefiles

UNIX/Linux Lösung. Mär 08, 16 16:11 Seite 1/6


Revision Control System. Versionskontrolle

Crashkurs Kommandozeile

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung 2. Die Kornshell im Detail 3.Grundlagen der Programmierung

Bash-Skripting Linux-Kurs der Unix-AG

Dr. Monika Meiler. Inhalt

Merkblatt System-C Installation Linux

Verkettete Listen & Makefiles

Unix-Grundkurs 1. Thema heute: Shell-Skripten

4 PROGRAMMSTRUKTUR - WERKZEUGE

Bash-Scripting Linux-Kurs der Unix-AG

Benutzung der Manpage, Shell Teil 3

Arbeiten in der Unix-Kommandozeile

Literatur. Einführung in Unix. Login. Passwort. Mag. Thomas Griesmayer. Benutzererkennung und Passwort Case-Sensitiv Prompt

Einführung Unix Shell

Linux und Shell-Programmierung Teil 5

Software-Entwicklung mit make Praktikum Software-Technik Dipl.-Ing. T. Frund Juni 1998

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 D-Uebung2.fm

Arbeiten in der Unix-Kommandozeile

Linux Prinzipien und Programmierung

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Dateisystem 2, RegEx, Manpages

Nuetzlicher Kleinkram

Okt 10, 16 17:29 UNIX/Linux Lösung

Unix Grundlagen. - ii - Ambit Professional Seminar Series. Autor: Prof. J. Anton Illik Diplom-Informatiker

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung - 2. Die Kornshell im Detail - 3.Grundlagen der Programmierung

Exkurs: Unix Programme

Technische Infor matik 2 C/C++-Kurs. Arbeitsumgebung AG Rechner netze 1.1

Compiler Präprozessor Header Files

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

Toolbox Workshop 2013

Bash-Skripting Linux-Kurs der Unix-AG

Entwicklung mit mehreren Dateien

Installationsanleitung

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

L A T E X automatisieren

Einführung in die Kommandozeile

Desktop ade: Me and my shell

Informatik II Übung 1

Jörg Schilling Portable Build-Systeme. Fokus Fraunhofer

Das CIP der Mathematik

Linux Prinzipien und Programmierung

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Software Engineering. 13. Configuration Management. Franz-Josef Elmer, Universität Basel, HS 2012

Shell-Scripting Linux-Kurs der Unix-AG

Software Engineering. 14. Build und Deployment. Franz-Josef Elmer, Universität Basel, WS 2006/07

Einführung in UNIX Übung aus Systemprogrammierung & Systemnahme Programmierung. Wilfried Elmenreich

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

L A T E X automatisieren

Praktikumstermin B-07: make & Makefiles

UNIX Die wichtigsten Befehle

Python 3.6. Erste Schritte auf dem Mac. Syshack. 22. Juni 2017 Version 2.0. Python Erste Schritte auf dem Mac Syshack, 22.

Sep 25, 18 8:36 UNIX/Linux Lösung

Shell-Scripting Linux-Kurs der Unix-AG

GNU Make. Michael Niedermair. DANTE e. V. Herbs agung am an der Hochschule Esslingen (Revision: 340)

Anwenderseminar. Das Programmierwerkzeug make

SelfLinux Dateien unter Linux

ZWEITE ÜBUNG ZUR EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN LEONIE WEIßWEILER

Makropaket changes. Knut Lickert. 14. Juni 2005

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Zugang zu LISP. Franz Inc. Allegro Lisp Version 7.0 ist im Linux Pool installiert.

Betriebssysteme I WS 2016/17. Prof. Dr. Dirk Müller. 3 Shell-Grundlagen

GNU/Linux Introduction Part 3. Simon M. Haller, Sebastian Stabinger iis.uibk.ac.at

Dokumentations-Richtlinien

Unix/Linux Grundlagen für Einsteiger

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Arbeiten in der Unix-Kommandozeile

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Informatik II - Übung 01

Compiler Präprozessor Header Files

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

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

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

Beispiel: Vom Problem zum Code

UNIX Power Tools. Helferlein für den Alltag. Maximilian Haupt

SelfLinux Dateien unter Linux

Effizientes Arbeiten mit dem Emacs.

Transkript:

Rekompilation Welche Source-Files müssen mit welcher Option übersetzt werden? Welche Object-Files müssen zu welchen Programmen gelinkt werden? Welche Librar ies in welcher Reihenfolge dazu? Welches besondere Pre-Processing ist für einzelne Files nötig? Nach Änderung: Welche Kommandos sind für ein Rebuild nötig? run-file: Zuviel rekompilieren: Zeitverschwendung Manuelle Rekompilation: Zuwenig rekompilieren: Schwierig zu findende Bugs Falsche Rekompilation: Noch schwieriger zu findende Bugs Automatisier ung erforder t Infor mation file: Konfigurationsdokument 2005 AG Rechner netze 3-make.1

Benutzung von Aufr uf: make think edit make test Verfügbarkeit UNIX (seit Version 7, 1978) Auch auf Mainframes PC: Hunderte von -Var iationen Evolution der -Versionen V7 Sys5 SunOS GNU- 2005 AG Rechner netze 3-make.2

GNU- Kompatibel zu allen älteren -Versionen Standard- (IEEE POSIX.2) Solar is: /usr/local/bin/gmake Linux: /usr/bin/make Dokumentation: Info-File (C-h C-i m make RET) Achtung: Man-Page nicht für GNU- man/info gmake man/info make file Enthält Abhängigkeitsregeln: target : dependencies... command...... 2005 AG Rechner netze 3-make.3

Basisoperation Herstellung eines Targets Executable, Object-File, etc. Dependencies sind Input Alle Dependencies existieren und sind aktuell Target älter als Dependencies rebuild Kommandos an Shell übergeben Input für file Inhalt des aktuellen Verzeichnisses Eingebaute Regeln 2005 AG Rechner netze 3-make.4

files Beispiel-file edit: main.o input.o display.o buf.o g++ -o edit main.o input.o display.o \ buf.o -lx11 main.o: main.cc defs.hh buf.hh g++ -c main.c input.o: input.cc defs.hh g++ -c input.c display.o: display.cc defs.hh buf.hh g++ -c display.cc buf.o: buf.cc buf.hh defs.hh g++ -c buf.c clean: rm edit main.o input.o display.o buf.o core 2005 AG Rechner netze 3-make.5

files -Parameter Default-Target: erster Eintrag im file Alter native: make main.o make clean Variablen Definition im file: NAME=value Inder Kommandozeile: NAME=value (overr ide) Benutzung: $(NAME) 2005 AG Rechner netze 3-make.6

files Beispiel OBJECTS= main.o input.o buf.o LIBS= -lx11 edit: $(OBJECTS) g++ -o edit $(OBJECTS) $(LIBS) main.o: main.cc defs.hh buf.hh g++ -c main.c input.o: input.cc defs.hh g++ -c input.c buf.o: buf.cc buf.hh defs.hh g++ -c buf.c clean: rm edit $(OBJECTS) core Overr ide beim Aufr uf: make LIBS="-lX11R6" 2005 AG Rechner netze 3-make.7

-Aufruf Alternatives file make -f mymakefile Targ et make clean Variablen make LIBS="-lm -lx11" Unbeobachtetes Massen- make -k Testen make -n Parallelausführung make -j make -j3 2005 AG Rechner netze 3-make.8

: Details Syntax Kommentar : # Zeilenfor tsetzung: \<newline> Var iablen-definitionen: Zeilen mit [ˆ:\t] = xyz = x.cc y.cc z.cc OPTIONS = Default-Wer t für Var iablen: Leerstring := statt = kein Rescan bei Benutzung Rules: target [target...] : [:] [dependencies...] [ ;command] [TAB command]... Alle Targets hängen von allen Dependencies ab Shell-style Wildcards:? [ ] 2005 AG Rechner netze 3-make.9

: Details Syntax Target.DEFAULT gibt Default-Kommandofolge an für Targets ohne Regeln Phony Target : Target kein Filename.PHONY: clean clean: rm *.o temp core Kommandos Wichtig: Einrücken mit TAB Jedes Kommando wird mit /bin/sh -ce ausgeführ t Alter native: $(SHELL) Kommando-Echo abschalten: @ @echo Making object files... 2005 AG Rechner netze 3-make.10

: Details Fehler (Exit-Code 0) Stop Fehler ignorieren: clean: -rm *.o core Abbruch (Ctrl-C): aktuelles Target wird gelöscht Rekursives make: SUBDIRS= src lib doc test all: @for i in $(SUBDIRS); do \ echo Making in $$i...; \ (cd $$i && $(MAKE) $(MAKEFLAGS); \ done Implizite Regeln Schreibarbeit sparen eingebaut oder benutzerdefinier t 2005 AG Rechner netze 3-make.11

: Details Implizite Regel zum Übersetzen von.cc-files: file.o wird aus file.cc generier t Aufr uf von g++ file.cc ist Dependency für file.o Ermöglicht kürzeres file: OBJECTS= main.o input.o buf.o LIBS= -lx11 edit: $(OBJECTS) g++ -o edit $(OBJECTS) $(LIBS) main.o: defs.hh buf.hh input.o: defs.hh buf.o: buf.hh defs.hh Alter native Schreibweise: $(OBJECTS): defs.hh main.o buf.o: buf.hh 2005 AG Rechner netze 3-make.12

: Details Pattern Rules Eingebaute Regel für file.cc file.o %.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ CXX= g++ CXXFLAGS= Automatische Var iablen in impliziten Regeln: $@= herzustellendes Target $<=Dependency $?= Dependencies jünger als Target $ˆ = alle Dependencies $*= Filenamen-Präfix (dir/file) Overr ide: make CXX=CC CXXFLAGS=-O 2005 AG Rechner netze 3-make.13

: Implizite Regeln Selbstdefinier te Patter n-rules: GROFF= FOL= groff -t -mde /home/net/fol/folx PS/%.ps: %.tr $(FOL) < $< $(GROFF) -mgfol - > $@.new mv $@.new $@ Te xtfunktionen $(subst.c,.o,$(wildcard *.c)) $(sort $(wildcard PS/*.ps)) $(word 3, main.c buf.c kbd.c) subdirs= src lib doc allfiles= $(foreach dir,$(subdirs),\ $(wildcard $(dir)/*)) contents= $(shell cat file) 2005 AG Rechner netze 3-make.14

: Implizite Regeln Bedingte Ausführung ifeq ($(CXX),g++) LIBS= $(libs_for_g++) else LIBS= $(normal_libs) endif... prog: $(OBJECTS) $(CXX) -o $@ $(OBJECTS) $(LIBS) Substitution references ofiles= main.o kbd.o buf.o cfiles= $(ofiles:%.o=%.cc) 2005 AG Rechner netze 3-make.15