GNU Make Kurzreferenz

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

Grundlagen der Informatik Vorlesungsskript

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

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

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

Shell-Scripting Linux-Kurs der Unix-AG

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

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

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

Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen.

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg

Bedienungshinweise für XEmacs, make und GNU Debugger

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Arithmetik in der tcsh

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

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

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

Benutzung der Manpage, Shell Teil 3

Michael Dienert. 8. Dezember 2016

Shell-Scripting Linux-Kurs der Unix-AG

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

2 Eine einfache Programmiersprache

Compiler Präprozessor Header Files

Linux Prinzipien und Programmierung

Arbeiten in der Unix-Kommandozeile

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Übersicht Shell-Scripten

Arbeiten in der Unix-Kommandozeile

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

Unterschiede in Dateien mit diff

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Der Standard-Editor vi

Bash-Scripting Linux-Kurs der Unix-AG

DAP2 Praktikum Blatt 3

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

Windows PowerShell. CmdLets. PipeLine / Filter. Variablen / Operatoren. Schleifen / Prüfmethoden. Funktionen / Skripte. Allgegenwärtige Parameter

Quelle: (aber dort nicht mehr verfügbar)

Ein- und Ausgabeumlenkung

Numerik-Programm, mittlerweile mit vielen Erweiterungen (Toolboxen) Matlab = Matrix Laboratory Sehr gute Doku (doc, help, lookfor)

Computer & GNU/Linux Einführung Teil 4

C/C++ Programmierung

shell variable HOWTO.txt

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

2 Systemadministration

2 Eine einfache Programmiersprache

Bash-Skripting Linux-Kurs der Unix-AG

Funktionen in JavaScript

Systemnahe Programmierung in C (SPiC)

8.1 Vom Quellcode zur ausführbaren Programm

Linux und Shell-Programmierung Teil 5

Arbeiten mit der Shell Teil 2

SelfLinux Make. Autor: Oliver Böhm Formatierung: Florian Frank Lizenz: GFDL

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Bash-Skripting Linux-Kurs der Unix-AG

FACHHOCHSCHULE MANNHEIM

WS2018/ Oktober 2018

WS2017/ Oktober 2017

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

K Ergänzungen zur Einführung in C

Computer & GNU/Linux Einführung Teil 2

Programmiervorkurs für die Numerik Teil 1/4

Arrays. Einleitung. Deklarieren einer Array Variablen

Der C-Präprozessor. Lukas Stabe

Compiler Präprozessor Header Files

L A T E X automatisieren

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

Make-Einführung, Tipps und Tricks

hue12 January 24, 2017

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

Luis Kornblueh. May 22, 2014

Ulrich Stein

Modell Bahn Verwaltung. Tutorial. Links. Min. Programm Version 0.65, März w w w. r f n e t. c h 1 / 11

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

EWS, WS 2016/17 Pfahler I-1

Funktionen in JavaScript

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

Das filecontents Paket

Alles, was man auf der Kommandozeile eingeben kann, kann man auch in einem Skript verwenden. Umgekehrt gilt das gleiche.

Fachhochschule Frankfurt am Main Fachbereich 2: Informatik WS 2008/2009

Arbeiten in der Unix-Kommandozeile

Arbeiten in der Unix-Kommandozeile. PeP et al. Toolbox Workshop

2 Eine einfache Programmiersprache

unix command line HOWTO.txt

Shell-Programmierung

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

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

Softwarepraktikum: Einführung in Makefiles

Funktionen in Python

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

Methoden und Wrapperklassen

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmierung und Angewandte Mathematik

Transkript:

GNU Make Kurzreferenz Copyright c Ralf Hoppe 23. Februar 2005 1 Aufruf Der Make-Aufruf sieht wiefolgt aus: make [options] [VAR1=val1 VAR2=val2... ] goal. Die wichtigsten Optionen (options) sind dabei: directory=dir (-C dir) Make wechselt vor der Ausführung in das Verzeichnis dir. environment-overrides (-e) Variablen aus der Umgebung haben Vorrang. makefile=file (-f file) Verarbeitet file als Makefile. help (-h) Hilfe ignore-errors (-i) Make ignoriert alle Fehler während der Verarbeitung. include-dir=dir (-I dir) Spezifiziert weitere Verzeichnisse für die Suche nach Makefiles für include. keep-going (-k) make soll trotz Fehler versuchen die Ausführung fortzusetzen. no-builtin-rules (-r) Alle eingebauten impliziten Rules werden von Make ignoriert. no-builtin-variables (-R) Alle vordefinierten Variablen von Make werden ignoriert. touch (-t) Aktualisiere Änderungszeit der Dateien (touch) anstatt die zugehörigen Rules auszuführen. version (-v) Ausgabe der Version von Make. warn-undefined-variables Make gibt eine Warnung bei undefinierten Variablen aus. 2 Rules 2.1 Explizite Rules Jedes Makefile besteht aus sogenannten Rules, zu denen jeweils Targets, Prerequisites und Commands gehören. Eine explizite Rule wird folgendermaßen geschrieben: target(s) : [prerequisites] 1

Diejenigen (abhängigen) Targets, die für das Erreichen eine Ziel -Targets aktualisiert werden müssen, nennt man Goals. Ob eine Aktualisierung notwendig ist, entscheidet die Änderungszeit einer gleichnamigen Datei es sei denn das Goal oder auch die Prerequesites sind als.phony deklariert. Im letzteren Fall wird eine Datei weder vorausgesetzt noch erzeugt, d. h. das Target gilt immer als veraltet. Wie ein Goal bzgl. seiner Prerequesites aktualisiert wird, beschreiben die mit TAB beginnenden Shell-Commands. Beim Make-Aufruf kann ein spezifisches Goal übergeben werden, wird es weggelassen dann findet immer die erste gültige Rule im Makefile Anwendung. Sind Prerequesites selbst wieder Targets in anderen Rules, dann setzt sich der Aktualisierungsprozeß rekursiv fort. Die einzelnen Zeilen einer Rule werden immer in separaten Sub-Shells ausgeführt, was bei der Verwendung von Variablen zu beachten ist. 2.2 Implizite Rules Implizite Rules in Make-Files werden von GNU mittlerweile als obsolet bezeichnet, da sie von den (allgemeineren) Pattern-Rules abgelöst werden. Im Original beschreiben solche Rules die Beziehung zwischen Dateien bestimmter Extensions (im SInne von Prerequisite und Target) und ihre Bildungsregeln als Shell-Command, also z. B. :.c.o: Zahlreiche solcher Rules werden von Make durch Built-In Rules bereitgestellt. Die wichtigsten davon sind:.c.o:.cc.o:.s.o:.y.c:.l.c: $(CC) -c $(CFLAGS) $< $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(AS) $(ASFLAGS) $(YACC) $(YFLAGS) $(LEX) $(LFLAGS).tex.dvi: $(TEX) 2.3 Pattern-Rules Oftmals führen explizite Rules zu vielen gleichartigen Zeilen, in den sich z. B. nur Teile von Targets bzw. Dateinamen ändern, die Verarbeitung aber immer gleich ist. Eine Pattern- Rule schafft die Möglichkeit der (gleichartigen) Verarbeitung für alle Targets, die zu einem Pattern passen. Die Schreibweise einer solchen Rule ist die folgende: targets : target-pattern: dep-patterns commands 2

Das Target-Pattern setzt sich aus einem Präfix gefolgt von einem Prozentzeichen % und (zuletzt) einem Suffix zusammen. Das Prozentzeichen ist ähnlich einem Wildcard zu interpretieren, wobei der Teil des Targets, zu dem es paßt, als auch als Stamm bezeichnet wird. Zum Beispiel paßt %.o zu allen Targets (oder Dateien), die auf.o enden. $(objects): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ Make führt das Kommando für jedes Target aus, daß der Pattern-Rule entspricht das aber nur dann, wenn das Target nicht noch (irgendwo) ein Kommando zur Generierung (z. B. aus einer expliziten Rule) hat 1. 2.4 Built-In Targets.PHONY Phony Target, d. h. unabhängig davon ob eine gleichnamige Datei existiert wird es immer aktualisiert.ignore Fehler bei der Ausführung zugehöriger Kommandos werden ignoriert.precious Stopt Make die Programmausführung dann wird die zum Target gehörige Datei nicht gelöscht.default Kann zu einem Target keine Rule ermittelt werden, dann werden die hier spezifizierten Commands angewendet..export_all_variables Hierbei handelt es sich weniger um ein Target als vielmehr eine Anweisung alle Variablen zu den Child-Prozessen (u.u. Sub-Makes) zu exportieren. 2.5 Bedingte Ausführung Bedingte Ausführung ist durch Verwendung der folgende Schlüsselwörter möglich: ifdef VAR TRUE, wenn Variable VAR definiert ist. ifndef VAR TRUE, wenn Variable VAR nicht definiert ist. ifeq (VAR,val) TRUE, wenn Variable VAR gleich val ist (Alternativen: ifeq VAR val, ifeq "VAR" "val") ifneq (VAR,val) TRUE, wenn Variable VAR ungleich val ist Beispiel: ifeq ($(CC),gcc) else endif $(CC) -o foo $(objects) $(libs_for_gcc) $(CC) -o foo $(objects) $(normal_libs) Variablen können auf der Kommandozeile definiert (und vordefinierte sogar überschrieben) werden, Beispiel: make CFLAGS= -g -O. 1 Außerdem müssen die Prerequisites gefunden werden. 3

3 Variablen 3.1 Anwender-Variablen Ähnlich wie in Shell-Scripten können Variablen definiert und verwendet werden, also z. B. VAR= Hello World @echo $(VAR) Weitere Formen der Variablenzuweisung sind: VAR:=, VAR?=, VAR+=, für die auf das GNU Make http://www.gnu.org/software/make/manual/html_mono/make.html Manual verwiesen wird. Sie unterscheiden sich in der Zuweisung des Wertes entweder zum Zeitpunkt der Deklaration oder der Verwendung 2. Die Bezugnahme auf Shell-Variablen muß durch Doppel-Dollar, wie in $$var erfolgen. 3.2 Auto-Variablen 3 $< (erstes/einziges) Prerequisite $@ Target $? alle Prerequesite, die neuer als das Target sind $^ alle Prerequesites $+ alle Prerequesites, aber doppeltes Vorkommen bleibt erhalten $* Stamm der impliziten Rule oder Pattern-Rule Varianten dieser Variablen können folgendermaßen (hier am Beispiel von $@) gebildet werden: $(@D) Verzeichnis-Teil des Pfades von $@ $(@F) Datei-Teil des Pfades von $@ 3.3 Umgebungsvariablen In einem Makefile ist die Verwendung von Umgebungsvariablen möglich. Soche Variablen (sowie die auf der Kommandozeile übergebenen) werden auch an Sub-Makes exportiert. Sollen Variablen des aktuellen Makefiles exportiert werden, dann sind sie wiefolgt zu deklarieren: oder VAR = value export VAR export VAR = value Make wertet insbesondere die folgenden Umgebungsvariablen aus: 2 Dazu muß man wissen, daß GNU Make eine Zwei-Pass Anwendung ist. 3 Ohne Berücksichtigung von Variablen, die beim Handling von Archiven eine Rolle spielen. 4

MAKE Name des Make-Programms MAKEFILES Inhalt wird als Makefiles interpretiert, die vor der gesamten Verarbeitung ausgeführt werden sollen. MAKEFLAGS Flags, so als wären sie beim Aufruf übergeben worden. MAKECMDGOALS Liste von Goals die auf der Kommandozeile übergeben wurden. SHELL Name der Shell. CC Name des C/C++ Compilers 4 Funktionen $(subst from,to,text) Ersetzt from durch to in text. $(patsubst pat,new,text) Ersetzt in text alle Worte, die mit pat übereinstimmen durch new. $(strip string) Entfernt alle Whitespaces aus string. $(findstring find,text) Sucht den String find in text. $(filter pattern...,text) Selektiert in text die Wörter, die mit einem der pattern übereinstimmen. $(filter-out pattern...,text) Selektiert in text die Wörter, die mit keinem pattern übereinstimmen. $(sort list) Sortiert die Wörter in list, wobei Doppelte entfernt werden. $(dir fnames... ) Extrahiert den Verzeichnis-Teil aus fnames. $(notdir fnames... ) Extrahiert den Dateinamen-Teil aus fnames. $(suffix fnames... ) Extrahiert die Dateinamen-Erweiterung aus fnames. $(basename fnames... ) Extrahiert den Dateinamen-Teil (ohne Erweiterung) aus fnames. $(addsuffix suffix,names... ) Hängt suffix an jedes Wort in names an. $(addprefix prefix,names... ) Fügt prefix vor jedes Wort in names. $(join list1,list2) Vereinigt die Wortlisten list1 und list2. $(word n,text) Extrahiert das n-te (bei Eins beginnend) aus text. $(words text) Ermittelt die Anzahl der Worte in text. $(wordlist s,e,text) Gibt eine Liste von Worten aus text zurück, die von Position s bis e reicht. $(firstword names... ) Extrahiert das erste Wort aus names. $(wildcard pat... ) Sucht Dateien, die mit dem Shell-Pattern pat übereinstimmen. $(error text... ) Fehlerausgabe von text und Ende des Make-Prozesses. $(warning text... ) Ausgabe der Warnung text. $(shell cmd) Ausführung von Shell-Command cmd. 5

$(origin var) Teilt mit woher die Variable var stammt (z. B. environment, file, command line,... ) $(foreach var,list,text) Ersatz der Shell FOR-Schleife (für Details siehe GNU Make Manual, 8.4). $(call var,param,...) Berechne var neu, indem alle Referenzen $(1), $(2),... darin durch die Werte von param,... ersetzt werden. Hinweis: Enthält eine Variable VAR einen Funktionsnamen, dann ist zum Aufruf das Konstrukt $(call VAR) zu verwenden. 5 Spezialzeichen # Kommentar \ Zeilenfortsetzung (Verwendung am Zeilenende) @cmd Unterdrückt Echo der Kommandozeile bei Ausführung von cmd. -cmd Sollte cmd einen Fehler zurückgeben, wird der Make-Prozeß nicht gestopt. +cmd cmd wird rekursiv ausgeführt. 6