Outils d'utilisateurs

Outils du Site


build_system

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

build_system [2014/09/25 01:36]
gbdivers
build_system [2015/04/10 12:38] (Version actuelle)
gawaboumga
Ligne 3: Ligne 3:
  
 ====== Mettre en place une chaîne de compilation ====== ====== Mettre en place une chaîne de compilation ======
 +
 +===== Vue d'ensemble =====
  
 Le but est de mettre en place une chaîne de compilation complète, multi-plateformes, prenant en charge l'ensemble des étapes de la production de logiciel : Le but est de mettre en place une chaîne de compilation complète, multi-plateformes, prenant en charge l'ensemble des étapes de la production de logiciel :
Ligne 9: Ligne 11:
   * analyse statique et sémantique du code ;   * analyse statique et sémantique du code ;
   * compilation du code avec plusieurs compilateurs différents, pour comparer les performances et avoir un maximum de messages d'avertissement et d'erreur plus compréhensible ;   * compilation du code avec plusieurs compilateurs différents, pour comparer les performances et avoir un maximum de messages d'avertissement et d'erreur plus compréhensible ;
-  * l'exécution des tests unitaires et la génération de rapports ;++  * l'exécution des tests unitaires et la génération de rapports ;
   * l'analyse des performances ;   * l'analyse des performances ;
   * la génération de la documentation ;   * la génération de la documentation ;
Ligne 17: Ligne 19:
 Intégration continue : les modifications faites par les développeurs passent par un processus de validation en plusieurs étapes, permettant de vérifier les contraintes de développement avant intégration dans l'application finale. Processus automatisé permet de tester très régulièrement (en permanence) les modifications. L'objectif est de détecter très tôt les problématiques, pour les corriger rapidement. Utilisation de serveurs d'intégration continue : CDash, Jenkins, Hudson, TEamcity, CruiseControl ; outils de build : Meaven, Ant, Gradle, Ivy Intégration continue : les modifications faites par les développeurs passent par un processus de validation en plusieurs étapes, permettant de vérifier les contraintes de développement avant intégration dans l'application finale. Processus automatisé permet de tester très régulièrement (en permanence) les modifications. L'objectif est de détecter très tôt les problématiques, pour les corriger rapidement. Utilisation de serveurs d'intégration continue : CDash, Jenkins, Hudson, TEamcity, CruiseControl ; outils de build : Meaven, Ant, Gradle, Ivy
  
-===== La première base : le moteur de production =====+===== Le moteur de production =====
  
-Le moteur de production est un outil qui permet de gérer les projets (liste des fichiers à utiliser, en fonction des options de compilation). Doit pouvoir être utiliser avec différents éditeurs. Nous allons présenter l'utilisation de CMake dans cet ouvrage, n'hésitez pas à tester d'autres outils (Makefiles, Apache Ant, GNU Autotools, Scons).+Le moteur de production est un outil qui permet de gérer les projets (liste des fichiers à utiliser, en fonction des options de compilation). Il doit pouvoir être utilisé avec différents éditeurs. Nous allons présenter l'utilisation de CMake dans cet ouvrage, n'hésitez pas à tester d'autres outils (Makefiles, Apache Ant, GNU Autotools, Scons).
  
 Un point qui ne peut pas être fait par les outils, ce sont les choix de conception du code. Il est important de viser dans un premier temps une bonne conception en laissant de côté les problèmes de performances, le but est surtout de pouvoir modifier facilement le code en fonction des mesures de performances. Il sera acceptable dans la majorité des cas d'avoir un code un peu moins performant, mais bien conçu, qu'un code qui serait un peu plus performant, mais dont la moindre évolution prendrait beaucoup de temps. Dans les cas où l'on souhaiterait quand même écrire un tel code, il est primordial d'isoler ces parties de code spécifiques d'une plateforme ou d'un matériel. Le rôle du moteur de production sera aussi de gérer les différents codes possibles. Un point qui ne peut pas être fait par les outils, ce sont les choix de conception du code. Il est important de viser dans un premier temps une bonne conception en laissant de côté les problèmes de performances, le but est surtout de pouvoir modifier facilement le code en fonction des mesures de performances. Il sera acceptable dans la majorité des cas d'avoir un code un peu moins performant, mais bien conçu, qu'un code qui serait un peu plus performant, mais dont la moindre évolution prendrait beaucoup de temps. Dans les cas où l'on souhaiterait quand même écrire un tel code, il est primordial d'isoler ces parties de code spécifiques d'une plateforme ou d'un matériel. Le rôle du moteur de production sera aussi de gérer les différents codes possibles.
Ligne 106: Ligne 108:
 Utilisation de pkg-config ? Utilisation de pkg-config ?
  
-===== La seconde base : génération de rapport =====+===== La génération de rapport =====
  
 Besoin de générer sous forme facilement exploitable, c'est à dire lisible (graphiquement), triable, filtrable, catégories, etc. Par exemple Qt Creator ou CDash. Open Babel Dashborad Besoin de générer sous forme facilement exploitable, c'est à dire lisible (graphiquement), triable, filtrable, catégories, etc. Par exemple Qt Creator ou CDash. Open Babel Dashborad
  
-===== Partage du code et gestion des versions ===== 
- 
-outils : subversion, Git, mercurial 
- 
-utilisation en local avec un serveur ou via un site publique (github) 
- 
-fonctionnalités : gestion des versions, des tags, des branches 
- 
-===== Compilateurs et débogueur ===== 
- 
-Au moins les outils gratuits : gcc, clang, intel, microsoft 
- 
-Débogage : gdb 
- 
-===== Analyse statique, sémantique et dynamique du code ===== 
- 
-Message d'avertissement des compilateurs. Activer un maximum d'informations (à désactiver uniquement fichier par fichier, en cas de code volontairement spécial). Les messages d'avertissement ne sont pas optionnel. 
- 
-Outils spécifique : permet d'améliorer le code, ce qui peut avoir un impact sur les performances. gprof, Intel Inspector, cppchecker 
- 
-A voir : leakTracer, MallocDebug, Visual Leak Detector, Clang static analyzer 
- 
-===== Tests unitaires ===== 
- 
-boost, QTest, CTest 
- 
- 
-===== Analyse des performances ===== 
- 
-gprof, intel, studio (VTune), microsoft ? AMD ? Valgrind (callgrind), Shark/Saturn (Mac OS X only) 
- 
-===== Génération de la documentation ===== 
- 
-outils : doxygen, qdoc, docutils 
- 
-Au minimum : documentation technique, à usage interne. Mais possiblité de générer des documentations complètes (cf Qt), en HTML, PDF, LaTex 
- 
-===== Paquetage et déployement ===== 
- 
-CPack, génération de paquets plateforme spécifique (.deb, .rpm, dépôts Ubuntu, etc) et outils d'installation (NSIS, nullsoft, Inno Setup). Utilisation autonome ou avec CMake, même syntaxe que CPack. Pour installation ou mise à jour (logiciel dédié ?) Qt Install Framework ? 
- 
-<code> 
-// Dans CPackConfig.cmake 
-SET (CPACK_PACKAGE_NAME "compute_pi") 
-SET (CPACK_PACKAGE_VERSION "1.0") 
-SET (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Parallel computation of Pi") 
-SET (CPACK_PACKAGE_VENDOR "Sekou @ free.fr") 
-SET (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") 
-SET (CPACK_RESSOURCE_FILE_LICENCE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt") 
-INSTALL (TARGETS computePi RUNTIME DESTINATION bin) 
- 
-SET (CPACK_NSIS_HELP_LINK "http://devlper...") 
-SET (CPACK_DEBIAN_PACKAGE_DEPENDS "libglib-2.0-0 (>= 2.1)") 
-SET (CPACK_RPM_PACKAGE_REQUIRES "glib >= 2.1") 
- 
-IF (WIN32) 
-    SET (CPACK_GENERATOR "ZIP; NSIS") 
-ELSE (WIN32) 
-    IF (APPLE) 
-        SET (CPACK_GENERATOR "TGZ") 
-    ELSE (APPLE) 
-        SET (CPACK_GENERATOR "TGZ; RPM; DEB") 
-    ENDIF (APPLE) 
-ENDIF (WIN32) 
- 
-// composants 
-INSTALL (FILES ./include/compute_pi.h DESTINATION include COMPONENT headers) 
-INSTALL (TARGETS compute_pi ARCHIVE DESTINATION lib COMPONENT libraries) 
-INSTALL (TARGETS compute_pi DESTINATION bin COMPONENT applications) 
-INSTALL (TARGETS computePi RUNTIME DESTINATION bin COMPONENT applications 
-SET (CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime") 
-SET (CPACK_COMPONENT_LIBRARIES_GROUP "Development") 
-SET (CPACK_COMPONENT_HEADERS_GROUP "Development") 
-SET (CPACK_COMPONENTS_ALL applications libraries headers) 
-INCLUDE (CPack) 
-</code> 
- 
-{{ :900-1_cpack.png |}} 
- 
-<note legende>Installateur généré avec CPack</note> 
- 
-===== Le suivi des problèmes rapportés par les utilisateurs. ===== 
- 
-bug tracker 
  
 ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^
  
 {{tag> Cours C++}} {{tag> Cours C++}}
build_system.1411601818.txt.gz · Dernière modification: 2014/09/25 01:36 par gbdivers