cmake: création de Makele et compilation de projets ctest: mise en place de tests sur vos projets

Documents pareils
Cours Langage C/C++ Programmation modulaire

Builds et tests Utilisation de CMake et de Dart

Quelques éléments de compilation en C et makefiles

TP1 : Initiation à Java et Eclipse

Introduction à Eclipse

Construction de logiciel et packaging

TP1. Outils Java Eléments de correction

Installation et prise en main

Systeme d'exploitation

Le langage C. Séance n 4

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

Java Licence professionnelle CISII,

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Algorithmique et Programmation, IMA

Tutoriel d installation de Hibernate avec Eclipse

TP 1 : 1 Calculs en binaire, octal et hexadécimal

TP1 : Initiation à Java et Eclipse

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Initiation à la librairie graphique VTK

Etude de cas : PGE JEE V2

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Les structures. Chapitre 3

TD/TP 1 Introduction au SDK d Android

Projet De Stijl Plate-forme pour robots mobiles

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

[ GLPI et OCS pour Gentoo 2006] ArtisanMicro. Alexandre BALMES

Installation LTE-SIM. Simulation du réseau 4G (LTE-SIM) en vue d optimiser les ressources spectrales de l opérateur.

Raja Bases de données distribuées A Lire - Tutoriel

Comment congurer WinEdt pour L A TEX?

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Eclipse atelier Java

Tutoriel code::blocks

Bases Java - Eclipse / Netbeans

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Ateliers Python+Qt : Premiers pas : S'installer pour PyQt... en quelques minutes sous Windows!

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Introduction au langage C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Remise à niveau d un programme JAVA du domaine public

Le prototype de la fonction main()

Module.NET 3 Les Assemblys.NET

Reporting Services - Administration

Installation d'une galerie photos Piwigo sous Microsoft Windows.

Interagir avec le SharePoint. Version 1.0

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Table des matières. 10 Gimp et le Web. Option de traitement d'images Mémento pour la séance N o Création d'animation

La mémoire. Un ordinateur. L'octet. Le bit

wxwidgets dans un environnement Microsoft Windows

Construire des plug-ins pour SAS Management Console SAS 9.1

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Atelier B. Atelier B. Manuel Utilisateur. Version 4.0

Informatique I. Sciences et Technologies du Vivant (Semestre 1)

Microsoft Application Center Test

La double authentification dans SharePoint 2007


Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

TP1 : Initiation à l algorithmique (1 séance)

Outils pour la pratique

Installation et compilation de gnurbs sous Windows

INSTALLATION ET CONFIGURATION DE OPENLDAP

Chapitre I Notions de base et outils de travail

Chapitre 10 : Logiciels

1.3 Gestion d'une application

Généralités sur le Langage Java et éléments syntaxiques.

Environnements de développement (intégrés)

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Présentation du langage et premières fonctions

Dans la série. présentés par le site FRAMASOFT

Client Kiwi Backup : procédures d'installation et de mise à jour. Gilles Arnoult, Clément Varaldi

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Contents. 1 Premiers pas en Linux. 1.2 Généralités. 1.1 Bref historique Linux

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

Votre premier projet Android

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

TP, première séquence d exercices.

Environnements de développement (intégrés)

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Sauvegarde des bases SQL Express

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

INFO-F-404 : Techniques avancées de systèmes d exploitation

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

PG208, Projet n 3 : Serveur HTTP évolué

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Premiers Pas en Programmation Objet : les Classes et les Objets

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Arguments d un programme

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

TP1 - Prise en main de l environnement Unix.

KPI (Key Performance Indicator) dans MOSS

Transcription:

Introduction à CMake CMake fournit un ensemble d'outils permettant de compiler un projet pour diérentes plateformes, de faire des tests et de créer des packages pour diérents systèmes. Il est utilisé dans de nombreux projets tels que KDE et MySQL et est une bonne alternative aux autotools. Lorsque vous installez CMake sur votre système, vous avez de base les commandes suivantes: cmake: création de Makele et compilation de projets ctest: mise en place de tests sur vos projets cpack: création de package On peut également citer CDash qui fournit une interface web donnant toutes les informations sur les tests soumis sur diérentes plateformes. Pour plus d'informations, vous pouvez vous reporter à cette page http://www.cdash.org/. On peut résumer le processus d'un logiciel utilisant CMake par la gure suivante disponible sur la page de CMake: Au cours de ce TP, nous n'aborderons que CMake et CTest. CMake a son langage propre. La syntaxe est la suivante: # Ceci est un commentaire command(argument1 argument2... argumentn) COMMAND(argument1 argument2... argumentn) 1

Nous verrons dans la suite les principales commandes pour construire la plupart des projets. Le chier source, comportant tous les paramètres du projet et la démarche à suivre pour le construire, se nomme CMakeLists.txt. La procédure de construction peut être résumée par la gure suivante CMakeLists.txt cmake Makele chiers générés CMakeCache.txt CMakeFiles/ Eclipse KDevelop MS Visual Studio Autres Le chier CMakeCache.txt dénit un ensemble de variables de conguration et d'informations sur votre système. Le répertoire CMakeFiles contient les chiers intermédiaires de compilation, des chiers temporaires et autres chiers de conguration qui ne regardent que CMake. On ne s'intéressera dans la suite qu'à la construction de Makele qui est celle par défaut. Pour construire d'autres projets, vous devez spécier votre générateur à l'aide de l'option -G. Pour plus d'information, vous pouvez vous reporter à la page suivante générateurs de CMake. 1 Création d'un projet simple On va commencer par écrire notre premier CMakeLists.txt. Pour ce faire, créez un répertoire hello dans lequel vous mettrez l'incontournable Hello world!!. Programme hello.c: #include <stdio.h> int main() { printf("hello world!!\n"); return 0; } Le première commande que nous allons voir ici est add_executable permettant d'ajouter un exécutable à notre projet. La syntaxe est la suivante add_executable(<name> source1 source2... sourcen) 2

où name est bien entendu le nom de l'exécutable, sourcex sont les chiers sources permettant de construire l'exécutable. Il existe d'autres options qui ne seront pas développées ici mais que vous trouverez aisément dans la documentation de CMake. 1. Créez le chier CMakeLists.txt au même niveau que votre programme et ajoutez y la commande add_executable avec les bons arguments. 2. Créez un répertoire build dans lequel vous allez construire votre projet. Il est d'usage de construire le projet dans un autre répertoire que le répertoire source. Cela permet d'eacer la construction facilement et de ne pas mélanger les sources et la construction. 3. Allez dans le répertoire build puis tapez la commande terminal$ cmake.. Cette commande permet (comme expliqué précédemment) de créer le chier CMake- Cache.txt, le répertoire CMakeFiles et le Makele. 4. tapez ensuite terminal$ make Si tout s'est bien déroulé, vous devriez avoir votre exécutable dans le répertoire build que vous pouvez exécuter. Comme vous avez pu le constater, les commandes cmake et make ne sont pas très bavardes et il peut être intéressant de savoir ce qui est réellement fait derrière. Pour cela, vous pouvez utiliser les commandes suivantes terminal$ cmake --trace.. terminal$ make VERBOSE=1 N'oubliez pas de faire avant un make clean pour que le projet soit entièrement recompilé et voir les commandes du compilateur. 3

2 Création d'un projet écrit en langage C Nous allons voir à présent comment compiler un projet un peu plus complexe. Dans cette exemple, les principales commandes de CMake seront abordées. Nous avons mis à votre disposition un projet balls qui a l'arborescence suivante balls include src balls.h init.h init_window.h move.h mywindow.h main.c balls init.c init_window.c move.c Dans ce projet, nous créons une balle que nous déplaçons et qui rebondit sur les bords de la fenêtre. Nous allons vous guider pas à pas, pour qu'à la n, votre projet construise l'arborescence suivante répertoire d'installation bin include lib execball balls.h init.h init_window.h move.h mywindow.h libballs.a Nous allons dans un premier temps nommer notre projet via la commande project. La syntaxe est la suivante 4

project(<projectname> [languagename1 languagename2... ]) où projectname est le nom du projet, languagename est le nom du langage utilisé dans le projet. Par défaut le C et le C++ sont reconnus. Donc, dans notre cas, nous n'avons rien à ajouter. Cette commande permet de dénir les variables <projectname>_binary_dir qui représente le répertoire où le projet sera compilé, <projectname>_source_dir qui représente le répertoire où sont les sources. Vous pouvez acher à tout moment des messages lorsque vous exécutez la commande cmake en ajoutant dans votre CMakeLists.txt la commande message( [STATUS WARNING AUTHOR_WARNING FATAL_ERROR SEND_ERROR ] "message to display"...) Créez un CMakeList.txt dans le répertoire balls en y mettant les lignes project(boule) message("rep source du projet: ${boule_source_dir}") message("rep compilation du projet: ${boule_binary_dir}") Puis créez un répertoire build dans lequel vous taperez la commande terminal$ cmake.. Vous pouvez également passer en mode interface en utilisant la commande ccmake. terminal$ ccmake.. Puis tapez sur t, vous aurez un ensemble d'informations sur les variables déjà existantes. Nous allons à présent ajouter nos sous-répertoires via la commande add_subdirectory(source_dir ) 5

Ajoutez le répertoire include et le répertoire src. Relancez la commande cmake. Que se passe-t-il? Ajoutez la commande cmake_minimum_required(version 2.8) dans votre CMakeLists.txt. Comme vous avez pu le constater, il nous faut également un chier CMakeLists.txt dans les répertoires include et src. Nous allons commencer par le répertoire include. Nous voulons ajouter à notre projet tous les chiers headers (.h) et les mettre dans le répertoire include du répertoire d'installation du projet. Il faut dans un premier temps lister tous les.h. Vous pourriez le faire à la main mais lorsque vous avez une vingtaine de chiers, ce n'est pas forcément pratique. Vous pouvez utiliser la commande le qui permet de faire des opérations sur les chiers. La commande est la suivante file(glob variable [RELATIVE path] [globbing expressions]...) où GLOB génère la liste des chiers qui correspondent à la globbing expressions variable est le nom que l'on donne à cette liste RELATIVE path est le chemin où on va chercher la globbing expressions Dans notre cas, nous pouvons mettre file(glob include_h. *.h) Il ne reste plus qu'à spécier le répertoire d'installation via la commande install(files <files to add> destination <dir>) Dans notre cas, nous pouvons mettre INSTALL(FILES ${include_h} DESTINATION include) Nous en avons terminé avec le répertoire include. Passons au répertoire src. Pour compiler tous les chiers C, nous allons avoir besoin de ces chiers headers. Nous devons donc le spécier à CMake via la commande 6

include_directories(dir1 dir2...) Ajoutez dans le CMakeLists.txt se trouvant dans le répertoire balls include_directories(include) Créez un chier CMakeLists.txt dans le répertoire src puis dites à CMake d'ajouter le répertoire balls se trouvant dans src. Allez dans le répertoire src/balls et créez un CMake- Lists.txt dans lequel vous listerez tous les chiers C que vous mettrez dans une variable SRC. A partir de cette liste, nous allons créer une librairie via la commande add_library(<name> [STATIC SHARED MODULE] source1 source2... sourcen) Dans notre cas, nous aurons ADD_LIBRARY(balls ${SRC}) Ajoutez à présent install(targets balls DESTINATION lib) pour avoir libballs.a dans le répertoire lib du répertoire d'installation. Nous revenons au CMakeLists.txt se trouvant dans src pour créer un exécutable à partir du chier main.c et de la librairie créée précédemment. Créez une variable via la commande SET(PROJECT_LIBS balls) Puis ajoutez votre exécutable via la commande add_executable vue précédemment add_executable(execballs main.c) Il ne reste plus qu'à utiliser la commande target_link_libraries(<target> [item1 [item2 [...]]]) pour l'édition des liens. Nous ajoutons également notre exécutable dans le répertoire bin du répertoire d'installation. Dans notre cas, nous avons 7

TARGET_LINK_LIBRARIES(execballs ${PROJECT_LIBS}) install(targets execballs DESTINATION bin) Vous pouvez à présent lancer cmake ou ccmake. Pour spécier le répertoire d'installation, vous avez 2 possibilités soit vous modiez la variable CMAKE_INSTALL_PREFIX via cmake en utilisant la commande terminal$ cmake -DCMAKE_INSTALL_PREFIX=/la/ou/je/veux.. soit vous lancez la commande ccmake et vous modiez la variable CMAKE_INSTALL_PREFIX. Tapez ensuite make install. Allez dans le répertoire d'installation, puis tapez./bin/execballs. 3 Création d'un projet multi-langages utilisant des bibliothèques tierces Nous reprenons ici les sources du projet précédent dans lequel nous ajoutons un programme Fortran qui sera appelé dans un programme C++. Nous ajoutons également une interface graphique réalisée à partir de Qt pour voir nos boules. Le répertoire source s'appelle ballswithgui. Lancez cmake, puis installez le projet dans, par exemple, /home/lem2i/installballswithgui. Parcourez l'arborescence et regardez ce qui a changé. La commande nd_package permet de chercher des programmes sur votre système et les informations relatives (comme par exemple le répertoire des include ou des librairies). CMake fournit un ensemble de modules avec l'extension.cmake permettant de trouver certains programmes sur votre système. Les chiers se trouvent dans /usr/share/cmake- 2.8/Modules. Vous pouvez également créer vos propres modules mais nous ne le verrons pas ici. 4 Création de tests et génération de documentation Nous avons rajouté quelques tests ainsi que la génération de documentation via doxygen dans le projet ballswithguifinal. Pour rendre les tests possible, il sut d'ajouter enable_testing() puis d'ajouter les tests en 8

utilisant la commande add_test(testname Exename arg1 arg2...) Regardez le CMakeLists.txt dans le répertoire tests. Pour lancer les tests, il sut de taper make test après avoir fait make. La documentation est créée automatiquement si doxygen est sur le système et si IN- STALL_DOC est à ON. Après avoir fait make install, allez dans le répertoire doc/html se trouvant dans le répertoire d'installation. 9