SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Veranstalter Gold-Partner
Patrick Charrier
C++ Dependency Management 2.0
Veranstalter Gold-Partner
20
15
Patrick Charrier
Doktorand in Darmstadt
Graduiertenschule
Computational
Engineering
(TU Darmstadt)
Bereich
Medizinische
Simulation
Vorstellung
Veranstalter Gold-Partner
20
15
 Warum?
 Kleine Einführung in CMake
 Tweaks
 Old-School Dependency Management
 Die Zukunft?
Inhalt
Veranstalter Gold-Partner
20
15
1. Verleugung
 “Diese Bibliothek füge ich noch schnell hinzu.”
2. Wut
 “Warum kompiliert es auf diesem Rechner nicht?”
3. Verhandlung
 “Ach ich implementiere es einfach selbst.”
4. Depression
 “Hätte ich es nur nicht selbst implementiert.”
5. Akzeptanz
 “Gibt es eine Alternative?”
Die fünf Phasen des Dependency Managements
(nach Elisabeth Kübler-Ross)
Veranstalter Gold-Partner
20
15
 Wir benutzen immer häufiger Open Source und
allgemein Bibliotheken.
“Gartner: 80% of commercial apps to use open source by 2012”
 NeueVersionen kommen schneller.
 Wir arbeiten immer verteilter und zu
verschiedenen Zeiten.
 Sicherheitsrelevante Bugs werden ständig
gefunden (Heartbleed, etc.).
 Updates sind essentiell!
Und es wird noch schlimmer
Veranstalter Gold-Partner
20
15
 Das Individuum (der Entwickler)
profitiert vom Wissen anderer.
 Alle sind voneinander abhängig und inspiriert.
 siehe Clay Shirky on Love, Internet Style
https://www.youtube.com/watch?v=Xe1TZaElTAs
 Softwareentwicklung wird zu einem
gewaltigen (Schwarm)-organismus.
 Dieser erneuert sich ständig selbst.
Chancen sehen
Veranstalter Gold-Partner
20
15
 Wir programmieren ein 3D-Spiel!
 Benötigte Bibliotheken:
 Algorithmen -> boost
 Grafik -> OpenGL
 Sound -> libogg
 Scripting -> lua
 Level-Storage -> tinyxml, zlib
 Testing -> gtest
Ein Beispiel
Veranstalter Gold-Partner
20
15
 Das Spiel soll portabel sein.
 Deshalb:
 CMake definiert Meta Build-Scripte.
 Diese werden über sog. Generatoren in
Makefiles oderVS-Solutions umgewandelt.
CMake
Veranstalter Gold-Partner
20
15
CMake Beispiel
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Game)
FIND_PACKAGE(Boost COMPONENTS system thread REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
FIND_PACKAGE(tinyxml REQUIRED)
FIND_PACKAGE(zlib REQUIRED)
...
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} …)
ADD_EXECUTABLE(Game main.cpp)
TARGET_LINK_LIBRARIES(Game ${Boost_LIBRARIES} …)
Veranstalter Gold-Partner
20
15
 CPack ist eine Komponente von CMake.
 CPack kann:
 “Installieren”
INSTALL(TARGETS Game DESTINATION bin)
INSTALL(DIRECTORY media DESTINATION . PATTERN "*.svn" EXCLUDE)
 Pakete bauen
 Debian, RedHat
 NSIS-Installer (Windows)
 Apple-Bundles
Deployment mit CPack
Veranstalter Gold-Partner
20
15
 Das INSTALL-Target installiert nach
CMAKE_INSTALL_PREFIX.
 Das PACKAGE-Target erstellt die Pakete.
Deployment mit CPack
Veranstalter Gold-Partner
20
15
1. Möglichkeit: Alle DLL-Pfade in die
PATH-Umgebungsvariable eintragen.
2. Möglichkeit: CMake Copy-Script
Was ist mit DLLs?
# copy DLLs
COPYINSTALL_DLLS("${Boost_INCLUDE_DIR}/../../lib" . boost_system
boost_filesystem boost_thread boost_asio)
COPYINSTALL_DLLS("${OGRE_HOME}/bin/release" . "*")
COPYINSTALL_DLLS("${OGRECSS_INCLUDE_DIR}/../../lib" . "*")
COPYINSTALL_DLLS("${OGREPAGED_INCLUDE_DIR}/../../lib" . "*")
COPYINSTALL_DLLS("${OGREAL_INCLUDE_DIR}/../../lib" . "*")
Veranstalter Gold-Partner
20
15
1. Möglichkeit: In-Source Build.
2. Möglichkeit:
Alle Ressourcen von der
Source- in die Build-Dir kopieren.
3. Möglichkeit:
Die Working-Directory beim Start wechseln.
Was ist mit Ressourcen?
std::ifstream pathIn("override_path");
std::string path_override;
pathIn >> path_override;
if (!path_override.empty()) {
std::cout << "override path: " << path_override << std::endl;
chdir(trim(path_override.c_str()).c_str());
}
Veranstalter Gold-Partner
20
15
 Die Build Logik ist nun definiert.
 Jetzt brauchen wir nur noch die Bibliotheken:
1. Downloaden
2. Kompilieren
3. In CMake konfigurieren
Welcome to Dependency Hell
Veranstalter Gold-Partner
20
15
 Unter Ubuntu Linux:
1. Downloaden
2. Kompilieren -> Schon erledigt
3. CMake-Konfiguration
4. Fertig!
Welcome Dependency Hell
sudo apt-get install libboost-dev zlib1g-dev libogg-dev liblua50-dev libgtest-dev
cd game
cmake .
Veranstalter Gold-Partner
20
15
 Unter Microsoft Windows:
1. Downloaden
 boost (Binaries)
http://sourceforge.net/projects/boost/files/boost-binaries/1.57.0/
 libogg (Sources) https://www.xiph.org/downloads/
 lua (Binaries)
https://code.google.com/p/luaforwindows/downloads/list
 tinyxml (Sources)
http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.zip/download
 zlib (Binaries) http://gnuwin32.sourceforge.net/packages/zlib.htm
 gtest (Sources) https://code.google.com/p/googletest/downloads/list
Welcome to Dependency Hell
Veranstalter Gold-Partner
20
15
 Unter Microsoft Windows:
2. Kompilieren
 libogg (Sources) https://www.xiph.org/downloads/
 tinyxml (Sources)
http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.zip/download
 gtest (Sources) https://code.google.com/p/googletest/downloads/list
Welcome to Dependency Hell
Veranstalter Gold-Partner
20
15
Welcome to Dependency Hell
Not bad enough? Try this!
find_package(SOFA REQUIRED)
find_package(Boost COMPONENTS thread system REQUIRED)
find_package(TBB REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(OGLPlus REQUIRED)
find_package(PNG REQUIRED)
find_package(OpenCL REQUIRED)
find_package(assimp REQUIRED)
find_package(CImg REQUIRED)
find_package(ALGLIB REQUIRED)
find_package(DEFCCD REQUIRED)
find_package(VexCL REQUIRED)
Veranstalter Gold-Partner
20
15
Die Bibliotheken Sammlung
Veranstalter Gold-Partner
20
15
 Unter Microsoft Windows:
3. CMake-Konfiguration
Welcome to Dependency Hell
Veranstalter Gold-Partner
20
15
 Fast alle Find-Scripte unterstützen x_ROOT Variablen.
 Eine selbstgebaute CMake-Funktion sucht in einem
“Library Collection”-Pfad nach Bibliothek x
und setzt die entsprechende x_ROOTVariable.
 Das Find-Script greift diese auf und
findet Includes und Libraries relativ dazu.
„Zu Hilfe“ CMake
# automated library discovery
AUTO_LIB_DISCOVERY(BOOST_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/boost*" "Boost root path")
AUTO_LIB_DISCOVERY(OGRE_HOME "${LIBRARY_COLLECTION_ROOT_PATH}/ogre*" "Ogre root path")
AUTO_LIB_DISCOVERY(OGREBULLET_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libogrebullet*" "ogrebullet root
path")
AUTO_LIB_DISCOVERY(OGREAL_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libogeral*" "OgreAL root path")
AUTO_LIB_DISCOVERY(OGRECCS_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-ccs*" "Ogre-CCS root path")
AUTO_LIB_DISCOVERY(OGREPAGED_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-paged*" "Ogre-paged root path")
AUTO_LIB_DISCOVERY(OgreProcedural_HOME "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-procedural*" "Ogre-
Procedural root path")
AUTO_LIB_DISCOVERY(HYDRAX_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libhydrax*" "hydrax root path")
AUTO_LIB_DISCOVERY(SKYX_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libskyx*" "skyx root path")
Veranstalter Gold-Partner
20
15
Dear Mr Charrier,
I'm working on a project on geometric algebra
(implementation) and i would like to use Gaalop Precompiler
with C++.
I tried installing deb package and build Horizon example using
Gaalop but there are problems when I try to configure.
Variables GPC_INCLUDE_DIR, GPC_JAR and GPC_LIBRARY are
set NOT_FOUND.
Do you think there's a problem with installation?
Sincerely,
…
Welcome to Dependency Hell
Veranstalter Gold-Partner
20
15
 Portabilität
 Viele Bibliotheken
 Integration mitVersionsverwaltungen (VCS)
(SVN, GIT, etc.)
 Kleiner Overhead
 Plug and Play
 Durch Benutzerinhalt erweiterbar
(deshalb Dependency Management 2.0)
Anforderungen an ein modernes
Dependency Management
Veranstalter Gold-Partner
20
15
 Mit Visual Studio ist downloaden und kompilieren
einfacher mit NuGet.
 Fast alle Bibliotheken waren schon vorhanden.
Gute Arbeit!
NuGet
Veranstalter Gold-Partner
20
15
 Initialisierung:
 Paket downloaden und installieren:
 Der Rest ist “alter Hut”:
hunter
include("cmake/HunterGate.cmake")
hunter_add_package(Boost COMPONENTS regex filesystem)
find_package(Boost REQUIRED regex filesystem)
include_directories(${Boost_INCLUDE_DIR})
add_executable(foo foo.cpp)
target_link_libraries(foo ${Boost_LIBRARIES})
HunterGate(
URL "https://github.com/.../archive/v0.8.9.tar.gz"
SHA1 "a63185bfe1235b42a4644e84ab121c7ac4a0db65"
)
Veranstalter Gold-Partner
20
15
 Erfordert Ersetzung von FIND_PACKAGE durch:
 Alle Libraries werden gelinkt mit:
cpm
CPM_AddModule("aabb"
GIT_REPOSITORY "https://github.com/iauns/cpm-glm-aabb"
GIT_TAG "1.0.2")
target_link_libraries(${EXE_NAME} ${CPM_LIBRARIES})
Veranstalter Gold-Partner
20
15
 Ist plattformunabhängig.
 Kleiner Overhead (Konfigurationsdatei)
 Integriert mitVCS.
 Plug and Play
(Download, Abhängigkeitsauflösung
und Kompilierung ist vollautomatisch.)
 Benutzer können Pakete (“Blocks”) hochladen.
Veranstalter Gold-Partner
20
15
 “Pure” CMake-Erweiterung
 Erweitert CMake um:
 Checksummen
 Collections
 Events
 Logging
 Maps
 String Functions
 uvm.
 Auch: Dependency Management
Veranstalter Gold-Partner
20
15
Vergleich
Open
Source
Libs Binär Fetch Erweiter
bar
OS Pures
CMake
NuGet Nein 36137 Ja Archiv Ja Windows Nein
hunter Ja 21 Nein Archiv Ja Alle Ja
cpm Ja 60+ Nein GIT, SVN,
HG
Ja Alle Ja
biicode Ja 30+ Nein Files Ja Alle Nein
cmake++ Ja 1+ Ja GIT, Archiv Ja Alle Ja
Veranstalter Gold-Partner
20
15
 Windows Paket Manager
 Basierend auf PowerShell
 Steuerung über Command Line und GUI
 Aber: Unterstützt keine Bibliotheken.
 Jedoch:
chocolatey
C:Windowssystem32>choco install biicode
Chocolatey v0.9.9.5
Installing the following packages:
biicode
By installing you accept licenses for the packages.
Veranstalter Gold-Partner
20
15
Fragen?
Partner:
Veranstalter Gold-Partner
20
15Partner:
Vielen Dank!Ich freue mich auf Ihr Feedback!

Weitere ähnliche Inhalte

Was ist angesagt?

Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
os890
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 

Was ist angesagt? (20)

C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Entwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantEntwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit Vagrant
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpress
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
GUUG Hamburg OpenNebula
GUUG Hamburg OpenNebulaGUUG Hamburg OpenNebula
GUUG Hamburg OpenNebula
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
 
Einführung Maven
Einführung MavenEinführung Maven
Einführung Maven
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
git - eine praktische Einführung
git - eine praktische Einführunggit - eine praktische Einführung
git - eine praktische Einführung
 

Ähnlich wie C++ Dependency Management 2.0

Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
inovex GmbH
 

Ähnlich wie C++ Dependency Management 2.0 (20)

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 Minuten
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Präsentation plug in development
Präsentation plug in developmentPräsentation plug in development
Präsentation plug in development
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
 
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdfMartin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
German: Softwareprodukte aus einem Source Code mit Javascript
German: Softwareprodukte aus einem Source Code mit JavascriptGerman: Softwareprodukte aus einem Source Code mit Javascript
German: Softwareprodukte aus einem Source Code mit Javascript
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
Slides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfSlides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdf
 

C++ Dependency Management 2.0

  • 2. Veranstalter Gold-Partner 20 15 Patrick Charrier Doktorand in Darmstadt Graduiertenschule Computational Engineering (TU Darmstadt) Bereich Medizinische Simulation Vorstellung
  • 3. Veranstalter Gold-Partner 20 15  Warum?  Kleine Einführung in CMake  Tweaks  Old-School Dependency Management  Die Zukunft? Inhalt
  • 4. Veranstalter Gold-Partner 20 15 1. Verleugung  “Diese Bibliothek füge ich noch schnell hinzu.” 2. Wut  “Warum kompiliert es auf diesem Rechner nicht?” 3. Verhandlung  “Ach ich implementiere es einfach selbst.” 4. Depression  “Hätte ich es nur nicht selbst implementiert.” 5. Akzeptanz  “Gibt es eine Alternative?” Die fünf Phasen des Dependency Managements (nach Elisabeth Kübler-Ross)
  • 5. Veranstalter Gold-Partner 20 15  Wir benutzen immer häufiger Open Source und allgemein Bibliotheken. “Gartner: 80% of commercial apps to use open source by 2012”  NeueVersionen kommen schneller.  Wir arbeiten immer verteilter und zu verschiedenen Zeiten.  Sicherheitsrelevante Bugs werden ständig gefunden (Heartbleed, etc.).  Updates sind essentiell! Und es wird noch schlimmer
  • 6. Veranstalter Gold-Partner 20 15  Das Individuum (der Entwickler) profitiert vom Wissen anderer.  Alle sind voneinander abhängig und inspiriert.  siehe Clay Shirky on Love, Internet Style https://www.youtube.com/watch?v=Xe1TZaElTAs  Softwareentwicklung wird zu einem gewaltigen (Schwarm)-organismus.  Dieser erneuert sich ständig selbst. Chancen sehen
  • 7. Veranstalter Gold-Partner 20 15  Wir programmieren ein 3D-Spiel!  Benötigte Bibliotheken:  Algorithmen -> boost  Grafik -> OpenGL  Sound -> libogg  Scripting -> lua  Level-Storage -> tinyxml, zlib  Testing -> gtest Ein Beispiel
  • 8. Veranstalter Gold-Partner 20 15  Das Spiel soll portabel sein.  Deshalb:  CMake definiert Meta Build-Scripte.  Diese werden über sog. Generatoren in Makefiles oderVS-Solutions umgewandelt. CMake
  • 9. Veranstalter Gold-Partner 20 15 CMake Beispiel CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(Game) FIND_PACKAGE(Boost COMPONENTS system thread REQUIRED) FIND_PACKAGE(OpenGL REQUIRED) FIND_PACKAGE(tinyxml REQUIRED) FIND_PACKAGE(zlib REQUIRED) ... INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} …) ADD_EXECUTABLE(Game main.cpp) TARGET_LINK_LIBRARIES(Game ${Boost_LIBRARIES} …)
  • 10. Veranstalter Gold-Partner 20 15  CPack ist eine Komponente von CMake.  CPack kann:  “Installieren” INSTALL(TARGETS Game DESTINATION bin) INSTALL(DIRECTORY media DESTINATION . PATTERN "*.svn" EXCLUDE)  Pakete bauen  Debian, RedHat  NSIS-Installer (Windows)  Apple-Bundles Deployment mit CPack
  • 11. Veranstalter Gold-Partner 20 15  Das INSTALL-Target installiert nach CMAKE_INSTALL_PREFIX.  Das PACKAGE-Target erstellt die Pakete. Deployment mit CPack
  • 12. Veranstalter Gold-Partner 20 15 1. Möglichkeit: Alle DLL-Pfade in die PATH-Umgebungsvariable eintragen. 2. Möglichkeit: CMake Copy-Script Was ist mit DLLs? # copy DLLs COPYINSTALL_DLLS("${Boost_INCLUDE_DIR}/../../lib" . boost_system boost_filesystem boost_thread boost_asio) COPYINSTALL_DLLS("${OGRE_HOME}/bin/release" . "*") COPYINSTALL_DLLS("${OGRECSS_INCLUDE_DIR}/../../lib" . "*") COPYINSTALL_DLLS("${OGREPAGED_INCLUDE_DIR}/../../lib" . "*") COPYINSTALL_DLLS("${OGREAL_INCLUDE_DIR}/../../lib" . "*")
  • 13. Veranstalter Gold-Partner 20 15 1. Möglichkeit: In-Source Build. 2. Möglichkeit: Alle Ressourcen von der Source- in die Build-Dir kopieren. 3. Möglichkeit: Die Working-Directory beim Start wechseln. Was ist mit Ressourcen? std::ifstream pathIn("override_path"); std::string path_override; pathIn >> path_override; if (!path_override.empty()) { std::cout << "override path: " << path_override << std::endl; chdir(trim(path_override.c_str()).c_str()); }
  • 14. Veranstalter Gold-Partner 20 15  Die Build Logik ist nun definiert.  Jetzt brauchen wir nur noch die Bibliotheken: 1. Downloaden 2. Kompilieren 3. In CMake konfigurieren Welcome to Dependency Hell
  • 15. Veranstalter Gold-Partner 20 15  Unter Ubuntu Linux: 1. Downloaden 2. Kompilieren -> Schon erledigt 3. CMake-Konfiguration 4. Fertig! Welcome Dependency Hell sudo apt-get install libboost-dev zlib1g-dev libogg-dev liblua50-dev libgtest-dev cd game cmake .
  • 16. Veranstalter Gold-Partner 20 15  Unter Microsoft Windows: 1. Downloaden  boost (Binaries) http://sourceforge.net/projects/boost/files/boost-binaries/1.57.0/  libogg (Sources) https://www.xiph.org/downloads/  lua (Binaries) https://code.google.com/p/luaforwindows/downloads/list  tinyxml (Sources) http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.zip/download  zlib (Binaries) http://gnuwin32.sourceforge.net/packages/zlib.htm  gtest (Sources) https://code.google.com/p/googletest/downloads/list Welcome to Dependency Hell
  • 17. Veranstalter Gold-Partner 20 15  Unter Microsoft Windows: 2. Kompilieren  libogg (Sources) https://www.xiph.org/downloads/  tinyxml (Sources) http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.zip/download  gtest (Sources) https://code.google.com/p/googletest/downloads/list Welcome to Dependency Hell
  • 18. Veranstalter Gold-Partner 20 15 Welcome to Dependency Hell Not bad enough? Try this! find_package(SOFA REQUIRED) find_package(Boost COMPONENTS thread system REQUIRED) find_package(TBB REQUIRED) find_package(Eigen3 REQUIRED) find_package(GLEW REQUIRED) find_package(OGLPlus REQUIRED) find_package(PNG REQUIRED) find_package(OpenCL REQUIRED) find_package(assimp REQUIRED) find_package(CImg REQUIRED) find_package(ALGLIB REQUIRED) find_package(DEFCCD REQUIRED) find_package(VexCL REQUIRED)
  • 20. Veranstalter Gold-Partner 20 15  Unter Microsoft Windows: 3. CMake-Konfiguration Welcome to Dependency Hell
  • 21. Veranstalter Gold-Partner 20 15  Fast alle Find-Scripte unterstützen x_ROOT Variablen.  Eine selbstgebaute CMake-Funktion sucht in einem “Library Collection”-Pfad nach Bibliothek x und setzt die entsprechende x_ROOTVariable.  Das Find-Script greift diese auf und findet Includes und Libraries relativ dazu. „Zu Hilfe“ CMake # automated library discovery AUTO_LIB_DISCOVERY(BOOST_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/boost*" "Boost root path") AUTO_LIB_DISCOVERY(OGRE_HOME "${LIBRARY_COLLECTION_ROOT_PATH}/ogre*" "Ogre root path") AUTO_LIB_DISCOVERY(OGREBULLET_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libogrebullet*" "ogrebullet root path") AUTO_LIB_DISCOVERY(OGREAL_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libogeral*" "OgreAL root path") AUTO_LIB_DISCOVERY(OGRECCS_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-ccs*" "Ogre-CCS root path") AUTO_LIB_DISCOVERY(OGREPAGED_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-paged*" "Ogre-paged root path") AUTO_LIB_DISCOVERY(OgreProcedural_HOME "${LIBRARY_COLLECTION_ROOT_PATH}/ogre-procedural*" "Ogre- Procedural root path") AUTO_LIB_DISCOVERY(HYDRAX_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libhydrax*" "hydrax root path") AUTO_LIB_DISCOVERY(SKYX_ROOT "${LIBRARY_COLLECTION_ROOT_PATH}/libskyx*" "skyx root path")
  • 22. Veranstalter Gold-Partner 20 15 Dear Mr Charrier, I'm working on a project on geometric algebra (implementation) and i would like to use Gaalop Precompiler with C++. I tried installing deb package and build Horizon example using Gaalop but there are problems when I try to configure. Variables GPC_INCLUDE_DIR, GPC_JAR and GPC_LIBRARY are set NOT_FOUND. Do you think there's a problem with installation? Sincerely, … Welcome to Dependency Hell
  • 23. Veranstalter Gold-Partner 20 15  Portabilität  Viele Bibliotheken  Integration mitVersionsverwaltungen (VCS) (SVN, GIT, etc.)  Kleiner Overhead  Plug and Play  Durch Benutzerinhalt erweiterbar (deshalb Dependency Management 2.0) Anforderungen an ein modernes Dependency Management
  • 24. Veranstalter Gold-Partner 20 15  Mit Visual Studio ist downloaden und kompilieren einfacher mit NuGet.  Fast alle Bibliotheken waren schon vorhanden. Gute Arbeit! NuGet
  • 25. Veranstalter Gold-Partner 20 15  Initialisierung:  Paket downloaden und installieren:  Der Rest ist “alter Hut”: hunter include("cmake/HunterGate.cmake") hunter_add_package(Boost COMPONENTS regex filesystem) find_package(Boost REQUIRED regex filesystem) include_directories(${Boost_INCLUDE_DIR}) add_executable(foo foo.cpp) target_link_libraries(foo ${Boost_LIBRARIES}) HunterGate( URL "https://github.com/.../archive/v0.8.9.tar.gz" SHA1 "a63185bfe1235b42a4644e84ab121c7ac4a0db65" )
  • 26. Veranstalter Gold-Partner 20 15  Erfordert Ersetzung von FIND_PACKAGE durch:  Alle Libraries werden gelinkt mit: cpm CPM_AddModule("aabb" GIT_REPOSITORY "https://github.com/iauns/cpm-glm-aabb" GIT_TAG "1.0.2") target_link_libraries(${EXE_NAME} ${CPM_LIBRARIES})
  • 27. Veranstalter Gold-Partner 20 15  Ist plattformunabhängig.  Kleiner Overhead (Konfigurationsdatei)  Integriert mitVCS.  Plug and Play (Download, Abhängigkeitsauflösung und Kompilierung ist vollautomatisch.)  Benutzer können Pakete (“Blocks”) hochladen.
  • 28. Veranstalter Gold-Partner 20 15  “Pure” CMake-Erweiterung  Erweitert CMake um:  Checksummen  Collections  Events  Logging  Maps  String Functions  uvm.  Auch: Dependency Management
  • 29. Veranstalter Gold-Partner 20 15 Vergleich Open Source Libs Binär Fetch Erweiter bar OS Pures CMake NuGet Nein 36137 Ja Archiv Ja Windows Nein hunter Ja 21 Nein Archiv Ja Alle Ja cpm Ja 60+ Nein GIT, SVN, HG Ja Alle Ja biicode Ja 30+ Nein Files Ja Alle Nein cmake++ Ja 1+ Ja GIT, Archiv Ja Alle Ja
  • 30. Veranstalter Gold-Partner 20 15  Windows Paket Manager  Basierend auf PowerShell  Steuerung über Command Line und GUI  Aber: Unterstützt keine Bibliotheken.  Jedoch: chocolatey C:Windowssystem32>choco install biicode Chocolatey v0.9.9.5 Installing the following packages: biicode By installing you accept licenses for the packages.