Compilerbau. Organisatorisches C-Programmierung Make

Ähnliche Dokumente
1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

Archivieren und Komprimieren, SSH

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

C++ mit Eclipse & GCC unter Windows

Modulare Programmierung und Bibliotheken

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker

Version 0.3. Installation von MinGW und Eclipse CDT

Computergrafik 1 Übung, Wintersemester Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

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

Linux Prinzipien und Programmierung

Informationen zur Verwendung von Visual Studio und cmake

Softwarepraktikum: Einführung in Makefiles

Übung zu Grundlagen der Betriebssysteme. Einführungsveranstaltung

Erste Schritte mit Eclipse

Embedded-Linux-Seminare. Toolchains

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Archivieren und Komprimieren, Globs

Eclipse 3.0 (Windows)

Nuetzlicher Kleinkram

Eprog Starthilfe. 5. Oktober Einleitung 2

Entwicklung mit mehreren Dateien

Einführung in die Arbeit mit Eclipse und CDT

JDroidLib mit Eclipse (Mac/Linux/Windows)

Anleitung zur Einrichtung von OpenCV

Embedded So)ware. Einrichten der Arbeitsumgebung

Praktikum Ingenieurinformatik. Termin 1. Textdateien (ASCII, Unicode) Mein erstes C-Programm

Compiler und Präprozessor (1) Erstellen eines Projektes

Anleitung zur Einrichtung von OpenCV

Fernwartung des Schulservers übers Internet Anleitung ssh - putty winscp - für Arktur v bzw. v

Anleitung für die Verwendung des CIP Pools von eigenen Rechner

LaFonera Erweiterung - Erstinstallation -

Systemprogrammierung: Erste Schritte (P) Das Manpage-System (P) Versionsverwaltung mit Subversion (P)

AVR-Programmierung unter Mac OSX

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

/

ATM18-Projekt Arbeiten mit CodeVisionAVR C-Compiler Teil 02 - Aufbau eines C-Projektes

Einführung in die Nutzung von eclipse

Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++

C++ mit Eclipse. Eclipse-Konferenz Heidelberg, Prof. Dr. Thomas Wieland. Fachhochschule Coburg university of applied sciences

LAMP HowTo (Linux Apache MySQL PHP) Zugriff per SSH auf den Server. Servername: gyko.no-ip.info (Lokal: )

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Wiederholung: Prozesse

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

Apps-Entwicklung mit Netbeans

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Enigma2 Plugin Entwicklung mit Eclipse

Grundlagen. Kapitel 1

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

Einführung in die C-Programmierung

Installation und Benutzung AD.NAV.ZipTools

Programmentwicklung mit C++ (unter Unix/Linux)

Installation und Konfiguration von X-Server Xming auf Windows XP

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Propädeutikum. Dipl.-Inf. Frank Güttler

Objektorientierung: Klassen und Objekte

Grafische Oberfläche, Shell Teil 4 Linux-Kurs der Unix-AG

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Apps-Entwicklung mit Eclipse

1. Übung zu "Numerik partieller Differentialgleichungen"

Installation der Entwicklungswerkzeuge

Software Engineering I

Beuth Hochschule JDK und TextPad WS14/15, S. 1

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Inhaltsverzeichnis. I Einstieg in Eclipse und CDT 1. xiii

Grundlagen der Informatik Übungen 1.Termin

C++-Entwicklung mit Linux

Anleitung: Webspace-Einrichtung

HD-Pool und Remote Tools

Hex Datei mit Atmel Studio 6 erstellen

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Tutorium Rechnerorganisation

Dr. Monika Meiler. Inhalt

C-Programmierung mit Eclipse

Informatik für den Satellitenbau. Toolchains und Crosscompiler

Einführung zu den Übungen aus Softwareentwicklung 1

Grundlagen der Informatik - 6. Praktikum

Das Build Tool Ant. Sebastian Mancke,

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

DOKUMENTATION Datenübertragung LK - BAIK-Archiv

Zugriff zum Datenaustausch per scponly

Arbeitsbereich (workspace) auf Laufwerk D anlegen Dateiendung.dsw (=developer studio workbench)

Vorlesung Informatik II

Von SystemC zum FPGA in 7 Schritten. Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule

ANT. Kurzvortrag von Manuel Schulze.

How to install freesshd

IT Engineering Continuous Delivery. Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet. Alexander Pacnik Karlsruhe,

Transkript:

Compilerbau Organisatorisches C-Programmierung Make

Verantwortliche Lukas Dölle doelle@informatik.hu-berlin.de Büro: RUD 25, 4.204 Tel.: 2093-3927 Martin Kost kost@informatik.hu-berlin.de Büro: RUD 25, 4.208 Tel.: 2093-3025 Dr. Andreas Kunert kunert@informatik.hu-berlin.de Mathias Peters Mathias.peters@informatik.hu-berlin.de Büro: RUD 25, 4.222 Tel.: 2093-5466 Compilerbau 2

Gliederung 1. Organisatorisches a) Praktikumsaufgaben b) Praktikumsschein 2. Tar 3. C-Programmierung a) Komponenten eines C-Systems b) GCC c) Präprozessor d) Include-Guards e) Strings f) Zeiger 4. Make 5. C-Programmierung mit Eclipse 6. Beispielprogramme Compilerbau 3

Praktikumsseite Alle wichtigen Informationen Ablauf Folien Aufgaben Klausurplanung, Klausurergebnisse Links Adresse http://www.dbis.informatik.hu- berlin.de/lehre/semesteruebersicht/sommersemester- 2011/praktikum-compilerbau.html Compilerbau 4

Praktikumsaufgaben (1) Ausgabe Montags, 14-tägig, Übersicht auf Webseite Über die Praktikumswebseite und Goya Aufgabenblätter sind Hausaufgabe Insg. 4 Aufgabenblätter (5 für Diplomstudenten) Erstes Blatt: Montag, 25.04.2011 Abgabe Sonntagabend (23:59 Uhr) jeweils 2 Wochen später Abgabe per Goya Bei Problemen: SOFORT E-Mail schicken Genaue Vorgabe in der Aufgabenstellung einhalten Abgabe als gzip-tes tar-archiv Erstes Blatt: Sonntag, 08.05.2011 Compilerbau 5

Praktikumsaufgaben (2) Gruppenbildung Aufgaben werden in Zweier- oder Dreiergruppen bearbeitet Gruppenmitglieder können an verschiedenen Praktikumsterminen teilnehmen Aber keine gemischten (Bachelor- + Diplomstudenten) Gruppen Gruppenbildung per Goya https://goya3.informatik.hu-berlin.de/goyacs Mailingliste Über Goya Compilerbau 6

Praktikumsschein = Zulassungskriterium zur Prüfung Mind. 70 % der Gesamtpunktzahl Jedes Aufgabenblatt muss bearbeitet und mit mind. einem Punkten bewerten worden sein Erfolgreiches Bestehen von zwei Befragungen (jeweils ca. 15 min) zu einem Aufgabenblatt (komplette Gruppe) Zeitpunkt wird mit Gruppe vereinbart Nichterscheinen = durchgefallen (Max.) Zweimal durchgefallen: Kein Praktikumsschein Kopieren von Lösungen = 0 Punkte Kein Praktikumsschein Gilt für alle Beteiligten Gruppe, die abgeschrieben hat Gruppe, die abschreiben lassen hat Compilerbau 7

Bewertung Programme müssen auf den Rechner des SUN- Pools (rabe oder star) unter Solaris laufen sonst keine Punkte 0 Punkte bei Verspätete Abgabe Falsche Dateien, falsche Verzeichnisstruktur Zu wenige/viele Dateien Archiv nicht entpackbar Nicht kompilierbar Warnungen beim Kompilieren geben Abzug Vorgegebene Testumgebung läuft nicht Kopieren der Lösung Compilerbau 8

Gliederung 1. Organisatorisches a) Praktikumsaufgaben b) Praktikumsschein 2. Tar 3. C-Programmierung a) Komponenten eines C-Systems b) GCC c) Präprozessor d) Include-Guards e) Strings f) Zeiger 4. Make 5. C-Programmierung mit Eclipse 6. Beispielprogramme Compilerbau 10

Tar Tool zum Archivieren von Dateien Optionen c Archiv erstellen (create) x Archiv entpacken (extract) t Inhalt ausgeben (table of content) f Angabe des Dateinamens (file name) z komprimieren mittels gzip (ggf. gtar benutzen) Beispiele Packen eines Archivs tar cfzv <archivname>.tar.gz <dateien/verzeichnis> Entpacken tar xfzv <archivname>.tar.gz Verifikation (Liste der Dateien im Archiv) tar tfz <archivname>.tar.gz Hilfe Man-Pages oder tar --help Compilerbau 11

Komponenten eines C-Systems Präprozessor: Vorbereitung des Quelltextes für nachfolgende Kompilation Kommentare, Zeilenumbrüche mit Backschlash entfernen Symbolische Konstanten (#define) ersetzen Header-Quelldateien (#include) in Quelltext kopieren Direktiven (#ifdef) auswerten Compiler: Analyse und Übersetzung des Quelltextes in Maschinencode Ergebnis: Objektdatei Linker: Bindung mehrerer Objektdateien zu einem Programm und Auflösung externer Referenzen Programm kann aus mehreren Übersetzungseinheiten (translation unit) bestehen Einbindung der Laufzeitbibliothek in das fertige Programm Compilerbau 12

Schema der Programmerstellung prog.c *.h Compiler prog.o *.o *.lib Linker prog Compilerbau 13

GCC C-Programme erstellen Erzeugen einer Objektdatei gcc -c <Quelldatei(en)> Linken (Binden) zu einem ausführbaren Programm gcc -o <Programmname> <Objektdateien> Weitere Optionen -Wall: -pedantic: -g: Beispiel 1 gcc -c prog.c gcc -o prog prog.o Beispiel 2 (Compiler + Linker) gcc -o prog prog.c Ausgabe aller Warnungen (W all) Warnung bei nicht standardkonformen Erweiterungen Übersetzung mit Debug-Informationen Compilerbau 14

Präprozessor Makros Präprozessor ist ein dummes, aber mächtiges Ersetzungstool Syntax #define <macro> <replacement name> Konstante #define NULL 0 #define BEGIN { Inline-Code #define CHECK_HANDLE(s, msg) if (s == 0) { } Vorteil: effizient, da kein zusätzlicher Funktions(stack)aufruf Bei Verwendung von Parametern (hier nicht näher erläutert) klammern, was das Zeug hält Über mehrere Zeilen durch Escape des Zeilenendes \<kein weiteres Zeichen> Compilerbau 15

Präprozessor Direktiven Konfigurationsmittel für Quellcode Beispiel (praepro.c) int i = 10; #ifdef INIT i = 20; #endif gcc praepro.c -o praepro i hat Wert 10 gcc -DINIT praepro.c -o praepro Dmakro: Definiert makro mit 1 i hat Wert 20 Compilerbau 16

Präprozessor Headerdateien include Präprozessor kopiert Inhalt der zu inkludierenden Datei an die Stelle, wo das #include steht #include <stdio.h> Suche im Include-Verzeichnis des Compilers #include "header.h" Suche im aktuellen Verzeichnis Compilerbau 17

Include-Guards Problem int nr; data.h algo.h include "data.h" int nr; include "data.h" data.c proggi.c #include "data.h" #include "algo.h" algo.c include "algo.h" Präprozessor ersetzt: int nr; int nr; Doppelt definierte Variable nr in proggi.c data.h: error: redefinition of 'nr' data.h: error: previous declaration of 'nr' was here Compilerbau 18

Include-Guards Headerdateien sollten nicht mehrmals inkludiert werden Headerdateien sichern mittels Include-Guards #ifndef dieseheaderdatei_h #define dieseheaderdatei_h // Deklarationen... #endif /* dieseheaderdatei_h */ Beispiel #ifndef DATA_H #define DATA_H int nr; #endif /* DATA_H */ Compilerbau 19

Strings In C definiert als Array von char Stringendezeichen '\0' nicht vergessen Beispiele char s1[] = "hallo"; char s2[5] = "hallo"; char s3[10] = "hallo"; s1 h a l l o \0 s2 h a l l o s3 h a l l o \0 \0 char s4[3] = "hallo"; char s5[5]; char s6[]; 10 s4 h a l warning s5????? error: array size missing in 's6' (In Java geht das) Compilerbau 22

Zeiger Ein Zeiger ist eine Variable, die eine Adresse einer anderen Variable (als Wert) speichert Deklaration int *intpointer; float *floatpointer; Zeiger auf einen Integer- bzw. Floatwert Adressoperator: & Gibt Adresse einer Variablen zurück Dereferenzierungsoperator: * Gibt Wert eines Objekts zurück, auf den Zeiger zeigt Compilerbau 23

Zeiger Beispiel 1. int x = 1, y = 2; int *p, **q; 2. p = &x; q = &p; 3. y = *p; 4. *p = 4; 5. *q = &y 6. **q = 5; x 1 y 2 p? q? Adresse 100 200 1000 2000 x 1 y 2 p 100 q 1000 Adresse 100 200 1000 2000 x 1 y 1 p 100 q 1000 Adresse 100 200 1000 2000 x 4 y 1 p 100 q 1000 Adresse 100 200 1000 2000 x 4 y 1 p 200 q 1000 Adresse 100 200 1000 2000 x 4 y 5 p 200 q 1000 Adresse 100 200 1000 2000 Compilerbau 24

Strings und Zeiger Beispiele char *s1 = "hallo"; char c1 = *s1; char c2 = s1[0]; char c3 = s1[4]; s1[0] = 'H'; char s2[] = "hallo"; s2[0] = 'H'; s1 h h o h a l l o \0 Fehler, da Stringliteral "hallo" konstant ist. s2 h a l l o \0 s2 H a l l o \0 Speicherbereich Compilerbau 25

Make Make ist ein Programm für die automatische Erstellung von Programm-Systemen Ermöglicht das Ausführen von Befehlen unter Beachtung von Zeitstempeln von Dateien Abhängigkeiten zwischen Dateien Aufruf: make [<Ziel>] [<Optionen>] Liest Input aus Datei GNUmakefile, makefile oder Makefile (in dieser Reihenfolge) Alternativ: make [<Ziel>] -f <Makefile> make f my_make_file.txt Compilerbau 28

Makefile Teilt dem Programm make mittels Regeln mit, was es tun soll ( Ziel ), und wie es das tun soll ( Anweisung ) Zu jedem Ziel (target) kann angeben werden, von welchen anderen Zielen (z. B. Dateien) dieses abhängt Beispiel Shell gcc -c prog.c gcc -o prog prog.o Makefile Ziele prog: prog.o gcc -o prog prog.o prog.o: prog.c gcc c prog.c Abhängigkeiten Anweisungen Regeln Compilerbau 29

Makefile Regeln (1) Beschreiben Abhängigkeiten der Ziele und welche Kommandos für die Ziele auszuführen sind, wenn die Ziele älter sind als die Abhängigkeiten Syntax <Ziel> : <Abhängigkeiten> <TAB> <Anweisungen> Beispiel prog: prog.o gcc -o prog prog.o prog.o: prog.c gcc c prog.c Compilerbau 30

Makefile Regeln (2) Beispiel prog.o: prog.c gcc c prog.c prog.c ist gleichzeitig Name für Datei und für Ziel Make macht darin keinen Unterschied Ziel ohne Abhängigkeiten und Anweisungen Immer aktuell Falls prog.c nicht existiert make: *** No rule to make target `prog.c'. Stop. Erweiterung Syntax Bei mehrzeiligen Abhängigkeiten oder Anweisungen steht ein \ am Zeilenende Compilerbau 31

Makefile Variablen Syntax <Name> = <Wert> Zugriff $(<Name>) Gebräuchliche Variablen CC Der Compiler CFLAGS Compiler-Optionen LDFLAGS Linker-Optionen Beispiel CC = gcc CFLAGS = -Wall pedantic c g LDFLAGS = -L $(LIBDIR) # Pfad zur Codebibliothek $(CC) $(CFLAGS) prog.c Compilerbau 32

Makefile Beispiel Beispiel # Ich bin ein Kommentar CC = gcc all: prog prog: prog.o $(CC) -o prog prog.o prog.o: prog.c $(CC) -c prog.c clean: rm -rf *.o -f: ignoriert nicht existierende Dateien -r: löscht Verzeichnisse rekursiv Aufrufe make (erstes Ziel: all), make all, make clean make prog, make prog.o Compilerbau 33

Makefile Spezielle Variablen Variablen mit spezieller Bedeutung $@ Regelziel $< erste Abhängigkeit $^ alle Abhängigkeiten Beispiel x: a b c $@ = x $< = a $^ = a b c Compilerbau 34

Makefile Pattern in Regeln Bei Programmen mit vielen Dateien und Abhängigkeiten, müsste für jede einzelne Objekt-Datei eine neue Regel erstellt werden unpraktikabel Regeldefinition durch Wildcard-Pattern Beispiel Alt Neu prog.o: prog.c $(CC) $(CFLAGS) prog.c %.o: %.c $(CC) $(CFLAGS) $< Jede.o-Datei hängt von der entsprechenden.c-datei ab Compilerbau 35

C-Programmierung C-Compiler GCC GNU Compiler Collection Betriebssystem: Linux, Solaris Inkl. C-Compiler Vorinstalliert auf den Rechnern der RBG Cygwin (inkl. GCC) für Windows Betriebssystem: Windows Portierung von Unix-Programmen auf Windows http://www.cygwin.com MinGW Minimalist GNU for Windows Betriebssystem: Windows Portierung u. a. von GCC + Debugger auf Windows http://sourceforge.net/projects/mingw Entwicklungsumgebungen Eclipse Betriebssystem: Windows, Linux, Mac In den Poolräumen installiert Benötigt CDT-Plugin http://www.eclipse.org Compilerbau 39

C-Compiler für Windows MinGW oder Cygwin MinGW Installer runterladen und installieren http://sourceforge.net/projects/mingw Auch installieren GNU Source-Level Debugger MSYS: Base System Damit auch make, rm, tar funktionieren Cygwin setup.exe runterladen und installieren http://www.cygwin.com Wichtig: evtl. Umgebungsvariablen in Windows anpassen PATH-Variable Für MinGW C:\MinGW\bin C:\MinGW\MSYS\1.0\bin Für Cygwin C:\Cygwin\bin Compilerbau 40

C-Programmierung mit Eclipse Installation 1. Download Eclipse IDE for C/C++ Developers (87 MB) http://www.eclipse.org/downloads Oder eine beliebige andere Version + CDT-Plugin http://www.eclipse.org/cdt 2. Eclipse-Zip-Datei entpacken + starten Beliebiges Workspace-Verzeichnis festlegen (Verzeichnis für Eclipse-Projekte) 3. CDT-Plugin installieren (falls andere Eclipse-Version gewählt) Help Install New Software Add Name: CDT Location: http://download.eclipse.org/tools/cdt/releases/helios OK Compilerbau 41

C-Programmierung mit Eclipse C-Projekt erstellen Folgende Beschreibung basiert auf Eclipse 3.6 Helios + CDT 7.0.2 1. Projekt erstellen File New C Project Namen eingeben Makefile project Empty Project Toolchains: MinGW/Cygwin/Solaris GCC Finish 2. Dateien erstellen File New Source File/Header File Namen eingeben Finish 3. Programm schreiben 4. Make Target erstellen Rechtsklick auf das Makefile: Make Targets Create Falls nur MinGW ohne MSYS: bei Build Command mingw32-make eintragen 5. Kompilieren Rechtsklick aufs Target Build Target 6. Ausführen Rechtklick aufs Binary Run As Local C/C++ Application Compilerbau 42

C-Programmierung mit Eclipse Make Target erstellen Compilerbau 43

C-Programmierung mit Eclipse Eclipse/CDT-Einstellungen Compilerbau 44

Zugang zum SUN-Pool von außerhalb Unsere Testumgebung: SUN-Pool (z. B. rabe, star) Daten zum SUN-Pool übertragen Mittels SCP, z. B. WinSCP Download: http://winscp.net/eng/docs/lang:de Rechnername: rabe.informatik.hu-berlin.de Benutzername + Kennwort (RBG-Account) Verbindung mit SUN-Pool herstellen Mittels SSH-Client, z. B. Putty Download: http://www.chiark.greenend.org.uk/~sgtatham/putty Session Host Name rabe.informatik.hu-berlin.de Session Connection type SSH Open Einloggen: Benutzername + Kennwort (RBG-Account) Optional: für grafische Programmausgaben (unter Windows) X-Server starten, z. B. Xming Download: http://www.straightrunning.com/xmingnotes Mit Option multiwindow starten: xming.exe -multiwindow Beim SSH-Client Portforwarding aktivieren Putty: Connection SSH X11 Enable X11 forwarding aktivieren Programme starten, z. B. eclipse, xterm, firefox, konqueror, Compilerbau 45

Beispielprogramme Header Unterschied zwischen Header- und Sourcedateien Telefon Ein kleines Programm, welches Name und Telefonnummer einliest, speichert und wieder ausgibt Telefon2 objektorientiertes Telefonbuch Include-Guards Programm zum Beispiel mit Include-Guards Praepro Präprozessoranweisungen String Einige Stringdefinitionen Treesort Sortieralgorithmus mit Zeigern auf Zeigern Compilerbau 46