Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Veranstalter Gold-Partner
Patrick Charrier
C++ Dependency Management 2.0
Veranstalter Gold-Partner
20
15
Patrick Charrier
Doktorand in Darmstadt
Graduiertenschule
Computational
Engineering
(TU Da...
Veranstalter Gold-Partner
20
15
 Warum?
 Kleine Einführung in CMake
 Tweaks
 Old-School Dependency Management
 Die Zu...
Veranstalter Gold-Partner
20
15
1. Verleugung
 “Diese Bibliothek füge ich noch schnell hinzu.”
2. Wut
 “Warum kompiliert...
Veranstalter Gold-Partner
20
15
 Wir benutzen immer häufiger Open Source und
allgemein Bibliotheken.
“Gartner: 80% of com...
Veranstalter Gold-Partner
20
15
 Das Individuum (der Entwickler)
profitiert vom Wissen anderer.
 Alle sind voneinander a...
Veranstalter Gold-Partner
20
15
 Wir programmieren ein 3D-Spiel!
 Benötigte Bibliotheken:
 Algorithmen -> boost
 Grafi...
Veranstalter Gold-Partner
20
15
 Das Spiel soll portabel sein.
 Deshalb:
 CMake definiert Meta Build-Scripte.
 Diese w...
Veranstalter Gold-Partner
20
15
CMake Beispiel
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Game)
FIND_PACKAGE(Boost COMPON...
Veranstalter Gold-Partner
20
15
 CPack ist eine Komponente von CMake.
 CPack kann:
 “Installieren”
INSTALL(TARGETS Game...
Veranstalter Gold-Partner
20
15
 Das INSTALL-Target installiert nach
CMAKE_INSTALL_PREFIX.
 Das PACKAGE-Target erstellt ...
Veranstalter Gold-Partner
20
15
1. Möglichkeit: Alle DLL-Pfade in die
PATH-Umgebungsvariable eintragen.
2. Möglichkeit: CM...
Veranstalter Gold-Partner
20
15
1. Möglichkeit: In-Source Build.
2. Möglichkeit:
Alle Ressourcen von der
Source- in die Bu...
Veranstalter Gold-Partner
20
15
 Die Build Logik ist nun definiert.
 Jetzt brauchen wir nur noch die Bibliotheken:
1. Do...
Veranstalter Gold-Partner
20
15
 Unter Ubuntu Linux:
1. Downloaden
2. Kompilieren -> Schon erledigt
3. CMake-Konfiguratio...
Veranstalter Gold-Partner
20
15
 Unter Microsoft Windows:
1. Downloaden
 boost (Binaries)
http://sourceforge.net/project...
Veranstalter Gold-Partner
20
15
 Unter Microsoft Windows:
2. Kompilieren
 libogg (Sources) https://www.xiph.org/download...
Veranstalter Gold-Partner
20
15
Welcome to Dependency Hell
Not bad enough? Try this!
find_package(SOFA REQUIRED)
find_pack...
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-Funktio...
Veranstalter Gold-Partner
20
15
Dear Mr Charrier,
I'm working on a project on geometric algebra
(implementation) and i wou...
Veranstalter Gold-Partner
20
15
 Portabilität
 Viele Bibliotheken
 Integration mitVersionsverwaltungen (VCS)
(SVN, GIT,...
Veranstalter Gold-Partner
20
15
 Mit Visual Studio ist downloaden und kompilieren
einfacher mit NuGet.
 Fast alle Biblio...
Veranstalter Gold-Partner
20
15
 Initialisierung:
 Paket downloaden und installieren:
 Der Rest ist “alter Hut”:
hunter...
Veranstalter Gold-Partner
20
15
 Erfordert Ersetzung von FIND_PACKAGE durch:
 Alle Libraries werden gelinkt mit:
cpm
CPM...
Veranstalter Gold-Partner
20
15
 Ist plattformunabhängig.
 Kleiner Overhead (Konfigurationsdatei)
 Integriert mitVCS.
...
Veranstalter Gold-Partner
20
15
 “Pure” CMake-Erweiterung
 Erweitert CMake um:
 Checksummen
 Collections
 Events
 Lo...
Veranstalter Gold-Partner
20
15
Vergleich
Open
Source
Libs Binär Fetch Erweiter
bar
OS Pures
CMake
NuGet Nein 36137 Ja Arc...
Veranstalter Gold-Partner
20
15
 Windows Paket Manager
 Basierend auf PowerShell
 Steuerung über Command Line und GUI
...
Veranstalter Gold-Partner
20
15
Fragen?
Partner:
Veranstalter Gold-Partner
20
15Partner:
Vielen Dank!Ich freue mich auf Ihr Feedback!
Upcoming SlideShare
Loading in …5
×

C++ Dependency Management 2.0

3,237 views

Published on

Im alltäglichen Einsatz verwenden wir eine potentiell steigende Anzahl an immer größeren Bibliotheken. Diese helfen uns schneller und effizienter unsere Ziele zu erreichen, werden ständig gewartet und ersparen nebenbei auch jede Menge Fehlerlösungs- und Dokumentationsaufwand. Gleichzeitig bedeuten sie jedoch einen unmittelbar höheren Aufwand für das Build und Dependency Management. Wie bekommt man dieses Problem in den Griff?
In der letzten Dekade hat das BuildSystem CMake diesbezüglich große Fortschritte bei der schnellen und alltäglichen Wiederverwendbarkeit von C++ Code bewirkt. So fördert zum Beispiel die Unabhängigkeit von spezifischen BuildSystemen zusammen mit Git und innovativen Hostern wie GitHub insbesondere die Entstehung und Verwendung von OpenSource
Software. Wie sieht die Zukunft aus?
Dependency Manager wie biicode zeigen einen noch komfortableren Weg auf, mit eigenem oder Drittanbieter Code zu arbeiten. Download, Build und Einbindung von Dependencies wird damit so einfach wie das Installieren einer App aus dem AppShop. Doch welche Vor- und Nachteile hat dieses System? Welche Alternativen gibt es?

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

C++ Dependency Management 2.0

  1. 1. Veranstalter Gold-Partner Patrick Charrier C++ Dependency Management 2.0
  2. 2. Veranstalter Gold-Partner 20 15 Patrick Charrier Doktorand in Darmstadt Graduiertenschule Computational Engineering (TU Darmstadt) Bereich Medizinische Simulation Vorstellung
  3. 3. Veranstalter Gold-Partner 20 15  Warum?  Kleine Einführung in CMake  Tweaks  Old-School Dependency Management  Die Zukunft? Inhalt
  4. 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. 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. 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. 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. 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. 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. 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. 11. Veranstalter Gold-Partner 20 15  Das INSTALL-Target installiert nach CMAKE_INSTALL_PREFIX.  Das PACKAGE-Target erstellt die Pakete. Deployment mit CPack
  12. 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. 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. 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. 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. 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. 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. 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)
  19. 19. Veranstalter Gold-Partner 20 15 Die Bibliotheken Sammlung
  20. 20. Veranstalter Gold-Partner 20 15  Unter Microsoft Windows: 3. CMake-Konfiguration Welcome to Dependency Hell
  21. 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. 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. 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. 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. 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. 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. 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. 28. Veranstalter Gold-Partner 20 15  “Pure” CMake-Erweiterung  Erweitert CMake um:  Checksummen  Collections  Events  Logging  Maps  String Functions  uvm.  Auch: Dependency Management
  29. 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. 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.
  31. 31. Veranstalter Gold-Partner 20 15 Fragen? Partner:
  32. 32. Veranstalter Gold-Partner 20 15Partner: Vielen Dank!Ich freue mich auf Ihr Feedback!

×