Grundkurs C++ Buildsysteme Versionsverwaltung mit git

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

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

Medieninformatik Praktikum. Jens Rademacher

Versionsverwaltung mit SVN

Versionkontrolle mit git

Qt Programmierung Teil 1 Fenster erstellen by NBBN ( CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse

Von SVN zu Git. Daniel Willmann cbna

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Subversion / CMake

Einführung in die Programmierung mit Qt

git Änderungen verwalten mit git

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

Apache Subversion (SVN)

Linux Cafe Referent: Bernd Strößenreuther

git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

Praktikum Ingenieurinformatik (PI)

Einführung in git. Johannes Gilger & Matthias Lederhofer. Rechen- und Kommunikationszentrum der RWTH Aachen Network Operation Center. 14.

Git - Fast Version Control System

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

Entwicklung mit mehreren Dateien

Gitting started. Christian Neukirchen. 14dec2011

Programmieren 2 05 Versionsverwaltung mit Git

Qt-Projekte mit Visual Studio 2005

Apache Subversion (SVN)

Einführung in Verteilte Versionskontrollsysteme. am Beispiel von Git

Versionsverwaltung mit git. Christoph Knabe FB VI

WOZU VERSIONSKONTROLLE?

Git in großen Projekten

Spiel, Spaß und Spannung mit Git

Die Projek*ools. Files, Git, Tickets & Time

Installation von Git für unsere OpenDCC/Fichtelbahn Entwickler Stephan Bauer, Christoph Schörner, Andreas Kuhtz

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann

Einführung in Git. Dirk Deimeke. 19. August My own IT. ddeimeke (My own IT) Einführung in Git 19. August / 23

Eine Einführung in das verteilte Quelltextverwaltungssystem Git

Verteile Revisionskontrolle mit GIT

Einführung in Subversion. Tutorium SWP

1 Zugang zum GIT Repository

Versionsverwaltung mit CVS

Embedded So)ware. Einrichten der Arbeitsumgebung

Konfigurationsdateien mit Git verwalten

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013

Versionierung und Bugtracking mit Git(Hub)

TortoiseGit Step by Step Step 1: git for windows herunterladen und installieren.

Praktikumstermin B-07: make & Makefiles

git verteilte Versionskontrolle

Was ist QT? Beispiele: KDE Google Earth Mathematika

GUI Programmierung mit Qt

Versionsverwaltung mit Mercurial für Einsteiger

Dezentrale Versionsverwaltung

Moodle aktuell halten mit Git

Tutorium #1. Softwareentwicklung Praktikum Gruppe 4 Anja Karl. prog-tutor-anja@iicm.edu.

Nuetzlicher Kleinkram

Torsten Flatter inovex GmbH. "Git.NET" gibt's nicht?

Hex Datei mit Atmel Studio 6 erstellen

1. Vom Sourcecode zum Programm

Programmentwicklung mit C++ (unter Unix/Linux)

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

Praxisorientierte Einführung in C++ Lektion: "Einführung in das GUI-Toolkit Qt"

Mercurial. or how I learned to stop worrying and love the merge. Ted Naleid IAIK

1 Zugang zum GIT Repository

Objektorientierung: Klassen und Objekte

Softwaretechnologie -Wintersemester 2012/2013- Dr. Günter Kniesel

Modulare Programmierung und Bibliotheken

Einführung in die Programmierung mit C++

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

git Alexander Bernauer Rico Schiekel

Objektorientierung Grundlagen

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Versionierung für OpenSourcler

Git eine kurze Einführung

Git II. Dezentrale Versionsverwaltung im Team

Informationen zur Verwendung von Visual Studio und cmake

Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt

Linux Prinzipien und Programmierung

Das Build Tool Ant. Sebastian Mancke,

C++, STL und Qt. C++, STL und Qt. Dipl.Ing. Christoph Stockmayer, Schwaig,

Subversion. Einstieg in die. Versionskontrolle

Eine kleine Makefile Einführung

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Git-Workflows im Alltag

Versionskontrollsysteme

Der C++ Crashkurs v1.0

Angewandte Kryptografie Praktikum 0

Prüfungsvorleistung Datenstrukturen

Einführung in Versions- und Konfigurationsmanagementsysteme

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

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

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

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

Versionsverwaltung von Softwareartefakten. 21. Oktober 2014

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

an Hand eines Beispiels Konsole

Having fun with GIT. Chris Wewerka. Software Development Specialist

Programmieren in C++

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Fachpraktikum Graphische Benutzungsoberflächen Wintersemester 2007/08

Concurrent Versions System (CVS)

Einführung in Subversion

Zählen von Objekten einer bestimmten Klasse

Tool-Chain. Übung. Eclipse, SVN, Ant, Cobertura, Metrics Labor "Software Engineering Experiment" Sebastian Meyer und Kai Stapel

Transkript:

Grundkurs C++ Buildsysteme Versionsverwaltung mit git Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018 Folie 1/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Buildsysteme Beispielhaftes Übersetzungsszenario: main.cpp, lcdrange.cpp, lcdrange.h Folie 2/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Headerdateien //blackbox.h #ifndef BLACKBOX_H #define BLACKBOX_H #include "port.h" class BlackBox { public: BlackBox(); ~BlackBox(); private: char buf; void transfer(char &data); Port *inport; Port *outport; }; #endif //port.h #ifndef PORT_H #define PORT_H class Port { public: Port(int id=0); private: int portnr; }; #endif

Headerdateien II (funktioniert nicht!) //blackbox.h #ifndef BLACKBOX_H #define BLACKBOX_H #include "port.h" class BlackBox { public: BlackBox(); ~BlackBox(); private: char buf; void transfer(char &data); Port *inport; Port *outport; }; #endif //port.h #ifndef PORT_H #define PORT_H #include "blackbox.h" class Port { public: Port(int id=0); private: int portnr; BlackBox *mybb; BlackBox *rembb; }; #endif

Headerdateien III //blackbox.h #ifndef BLACKBOX_H #define BLACKBOX_H #include "port.h" class Port; class BlackBox { public: BlackBox(); ~BlackBox(); private: char buf; void transfer(char &data); Port *inport; Port *outport; }; #endif //port.h #ifndef PORT_H #define PORT_H #include "blackbox.h" class BlackBox; class Port { public: Port(int id=0); private: int portnr; BlackBox *mybb; BlackBox *rembb; }; #endif

Buildsysteme Build-Vorgang: Verzeichnis tutorial7 main.cpp, lcdrange.cpp, lcdrange.h Compiler main.o, lcdrange.o Folie 6/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Manueller Build-Vorgang g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -o lcdrange.o lcdrange.cpp g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -o main.o main.cpp moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 lcdrange.h -o moc_lcdrange.cpp g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -o moc_lcdrange.o moc_lcdrange.cpp g++ -Wl,-O1 -o tutorial7 lcdrange.o main.o moc_lcdrange.o -lpthread Niemand will das von Hand machen! Folie 7/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

make Compilieren und Linken wird von make automatisiert. Informationen zu Quelltextdateien und Libraries steht in Makefiles. Buildvorgang: Aufruf von make Folie 8/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

qmake Qt-spezifische Erweiterungen (z.b. QObject, signals, slots). Standard-C++-Compiler kennt diese Erweiterungen nicht. Meta Object Compiler (moc) erzeugt Standard-C++ Dateien. Viele Einzelschritte Außerdem: User Interface Compiler (uic): QtDesigner Vereinfachung durch Verwendung eines Buildsystems: qmake Folie 9/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

qmake qmake -project qmake make (Projektdatei *.pro) (Makefiles(s) erzeugen) (mocen, kompilieren, linken) qmake wird nur aufgerufen, wenn Dateien hinzukommen bzw. entfernt werden. Bei Problemen *.pro bearbeiten, nicht aber die Makefiles Folie 10/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

qmake beispielhafte *.pro Datei HEADERS += port.h \ blackbox.h SOURCES += build.cpp \ port.cpp \ blackbox.cpp TARGET=../bin/build Folie 11/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Teil II Versionsverwaltung mit git Folie 12/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Warum? Programm wird laufend fortentwickelt Mehrere Leute arbeiten an einem Programm Jeder soll mit möglichst aktueller Version des Programms arbeiten Fehler bei Austausch von Dateien sollen vermieden werden, bzw. problemlos korrigiert werden können Programmierer sollen wissen, was wann geändert wurde Zugriff auf ältere Versionen haben erkennen, wenn Veränderungen zur gleichen Zeit von verschiedenen Leuten gemacht wurden Folie 13/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Das Repository Engl. für Behälter, Ablage, Aufbewahrungsort Folie 14/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Repository Problemstellung Gruppenarbeit Folie 15/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Gruppenarbeit mit Versionsverwaltungssystemen Folie 16/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Git am LDV GitHub-ähnliche Oberfläche unter http://gitlab.ldv.ei.tum.de/ Login mit LRZ-Kennung & Passwort Namen & Mailadresse setzen für Commits: git config --global user.name "Erika Mustermann" git config --global user.email "e.mm@mytum.de" mkdir gruppe1_kurzprojekt cd gruppe1_kurzprojekt git init cp /Pfad_zu_Dateien/*./ git add * git commit -m 'first commit' git für Windows: https://gitforwindows.org/ git remote add origin https://gitlab.ldv.ei.tum.de/cpp-gk18/gruppe1_kurzprojekt git push -u origin master Folie 17/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Was gehört ins Repository, was nicht? Textdateien, die Veränderungen unterliegen: *.cpp, *.h Dokumentation evtl. Projektdateien (z.b. *.pro, CMakeLists.txt) u.ä. (z.b. selbsteditierte Makefiles) Beim Übersetzen erzeugte Binärdateien bzw. mit moc/uic erzeugte Dateien (generell alle automatisch generierten Dateien): differenzieller Mechanismus liefert Irrelevantes Repository verfettet Abgleich dauert länger Was sonst zum Projekt gehört: Bilder Musik und Effektsounds Konfigurationsdateien für eigenes Programm Testdaten Folie 18/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Normales Arbeiten mit git Einmalig: git clone https://gitlab.ldv.ei.tum.de/cpp-gk18/playground.git Arbeitskopie auf den aktuellen Stand bringen: git pull Änderungen der Arbeitskopie ins Repository (wenn unverändert): git status git commit git push Änderungen der Arbeitskopie ins Repository (wenn verändert): git status git pull git commit git push Folie 19/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Zu beachten git soll bestimmte Dateien/Ordner ignorieren: Datei.gitignore im Hauptverzeichnis erstellen. Jede Zeile gibt eine Datei oder einen Ordner an, den git ignorieren soll Pfade beziehen sich auf das Hauptverzeichnis Platzhalter (*,?) sind erlaubt Finger weg von.git-ordnern und deren Inhalt Weitere wichtige Kommandos: git log git <befehl> --help git diff git checkout <Datei> (git init / git clone) Schöne Cheat-Sheets : https://www.git-tower.com/blog/git-cheat-sheet/ https://education.github.com/git-cheat-sheet-education.pdf Folie 20/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018

Hausaufgabe heute Abend in Moodle Einfache GUI-Anwendung mit Qt diesmal keine Binaries nötig! Abgabetermin: 02. Mai 2018, 15:00 Uhr Bei Fragen und Problemen: cpp-tutor@ldv.ei.tum.de Folie 21/21 GK C++: Buildsysteme, Versionsverwaltung Martin Knopp, Martin Gottwald, Stefan Röhrl 25.04.2018