Licence CC BY-NC-SA 3.0. CMake



Documents pareils
Builds et tests Utilisation de CMake et de Dart

Installation et compilation de gnurbs sous Windows

Construction de logiciel et packaging

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

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

Tutoriel code::blocks

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

Quelques éléments de compilation en C et makefiles

TP1. Outils Java Eléments de correction

wxwidgets dans un environnement Microsoft Windows

Plan du cours. Historique du langage Nouveautés de Java 7

1 Description générale de VISFIELD

Créer son premier package.deb. 19 août

Introduction à l informatique en BCPST

Projet De Stijl Plate-forme pour robots mobiles

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Cours Langage C/C++ Programmation modulaire

Environnements et Outils de Développement Cours 1 Introduction

TP1 : Initiation à Java et Eclipse

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Remise à niveau d un programme JAVA du domaine public

Chapitre 10 : Logiciels

Comment configurer Kubuntu

Optimisation de logiciels de modélisation sur centre de calcul

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

PG208, Projet n 3 : Serveur HTTP évolué

Installer Office sur Ordinateur / Tablette / Smartphone

sshgate Patrick Guiran Chef de projet support

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

TD/TP 1 Introduction au SDK d Android

Installation et prise en main

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

[DEVELOPPEMENT SUR LA CIBLE 2440] 19 avril 2010

Introduction au langage C

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille


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

Initiation à la librairie graphique VTK

Le langage C. Séance n 4

Projet Administration Réseaux

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

Programmation système en C/C++

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

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

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Présentation Utilisation. VirtualBox. Firas Kraïem. 22 février 2014

Votre premier projet Android

Retour d'expérience avec : OCS Inventory & GLP

Projet de développement

Apprendre Java et C++ avec NetBeans

TP1 : Initiation à Java et Eclipse

Procédure d installation d AMESim 4.3.0

Programmation C. Apprendre à développer des programmes simples dans le langage C

Annexe Android Studio

Manuel d'installation de GESLAB Client Lourd

HAYLEM Technologies Inc.

Accéder à ZeCoffre via FTP

The Mozilla Art Of War. David Teller. 20 septembre Laboratoire d Informatique Fondamentale d Orléans. La sécurité des extensions.

I0035 INGÉNIEUR - DÉVELOPPEUR APPLICAT IF / DECISIONNEL CONFIRMÉE SAS - SPSS - INFORMAT ICA. 27 ans - 4 ans d'expérience

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

Algorithmique et Programmation, IMA

Java Licence Professionnelle CISII,

Warren PAULUS Robin GODEFROID. C++ - Interface Graphique avec Visual Studio 2010

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

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

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

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Construction et sécurisation d'un système Linux embarqué. Frédéric AIME

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

2 Formation utilisateur

WPKG Gestion de paquets pour Windows

pythonocc: une plateforme de développement agile d applications CAO.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Exercice sur les Dockers

Comment créer son propre monitoring. (Version simple PHP)

Description de l implantation dans le centre d examen (nom du service ou de l outil et caractéristiques techniques)

Guide d'installation. Release Management pour Visual Studio 2013

Programmation Web. Madalina Croitoru IUT Montpellier

Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :

Chapitre 02. Configuration et Installation

L informatique en BCPST

Développeur C/C++ AFDX / ARINC / CAN / TCP/IP

Introduction Pourquoi Slax? Formatage Rendre la clé bootable sous linux Slax Installshield...

Productivité Performance Mobilité

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

BUREAU VIRTUEL. Utilisation de l application sur ipad. Guide utilisateur. Sciences Po Utilisation du bureau virtuel sur ipad 1 / 6

TwinCAT 3 C++ Création de modules C++ sous TwinCAT 3 VERSION : 1.0 / PH

Point sur les solutions de développement d apps pour les périphériques mobiles

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

NatStar V8.00. Ce document présente la liste des nouvelles fonctionnalités de la 8.00, disponible à partir de septembre 2013.

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Langage Java. Classe de première SI

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

La création d un paquet Debian. Aurélien Jarno. Journées du Logiciel Libre. 15 octobre 2005

Transcription:

ENVOL 2012 - TP Création de composants logiciels avec CMake Jean-Christophe Souplet jcsouplet@lri.fr Selon Présentation : «Introduction à CMake» De Alexandre Abadie (IR SED INRIA-Saclay) Contenu placé sous licence CC BY-NC-SA 3.0, http://creativecommons.org/licenses/by-nc-sa/3.0/

CMake Un générateur de Makefile Multiplateforme (Linux, Unix, Windows, MacOSX, Android, ios, etc) Principalement utilisé pour les projets C++, C, Fortran Indépendant du compilateur (gcc, llvm, VC, f90, etc) Opensource (Kitware) Projets utilisant CMake o Kde, Boost, VTK, ITK, ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 2

Installation Sous windows/mac en utilisant l installeur Sous Linux en utilisant le gestionnaire de paquets A partir des sources (exemple pour linux/mac) : o $./bootstrap o $ make o $ sudo make install ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 3

3 manières d utiliser CMake En ligne de commande : cmake Avec l interface curses : ccmake Avec l interface graphique : cmake-gui ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 4

In source/out source builds On préférera toujours utiliser le outsource builds. Pourquoi? o Permet de garder son dossier source propre o Pour avoir plusieurs types de compilations (options différentes, cross-compilation, etc) o Evite les problèmes avec les gestionnaires de versions Exemple : Commandes cmake associées : $ cd Build $ cmake../sources $ cmake. ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 5

Utilisation d un IDE CMake peut générer des projets pour certains IDE couramment utilisés o Visual Studio, Eclipse, Kdevelop, Aujourd hui, certains IDE supportent l import de projets CMake o QtCreator, KDevelop4, Pour connaître la liste des générateurs disponibles pour votre plateforme : o $ cmake -h ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 6

Exemple d un exécutable 1 cmake_minimum_required (VERSION 2. 8 ) 2 p r o j e c t (MYAPP) 3 4 add_executable (myapp main. cpp ) Compilation : ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 7

Exemple d une bibliothèque 1 cmake_minimum_required (VERSION 2. 8 ) 2 p r o j e c t (MYLIB) 3 4 add_l ibrar y ( foo SHARED foo. cpp ) Compilation ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 8

Exercice 1 : Utiliser CMake But o Comprendre l'utilisation de CMake en tant qu'outil de génération de Makefile o Avoir un aperçu des fichiers générés par CMake o Se familiariser avec la notion d'outsource build En mode graphique o Aller dans le dossier exercice1 et prendre connaissance de son contenu un fichier main.cpp un fichier CMakeLists.txt o Lancer CMake (en mode GUI) o Remplir le champ Source directory ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 9

Exercice 1 : Utiliser CMake o Remplir le champ Build directory (créer un dossier build, cf outsource build) o Cliquer sur Configure et choisir parmi les générateurs proposés Linux/Mac => Unix Makefile, Windows => VisualStudio ou Mingw o Cliquer sur Generate o Compiler (make dans le dossier de build sous mac et linux, générer la solution sous visual studio) En ligne de commande o Reprendre les étapes précédentes en ligne de commande. On utilisera ccmake pour générer le makefile. ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 10

Le langage CMake CMake fournit un langage de script simple pour : o Gérer les sources de son projet o Importer des bibliothèques externes o Assurer le portabilité de son code, etc => Liste de variables, commandes internes, structures de contrôle ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 11

Variables CMake Le type de base dans CMake est la chaine de caractères (string) Pour définir une variable on utilise le mot clé set o set ( Foo "abc" ) o set ( Foo a b c ) L accès à la valeur d une variable se fait avec la syntaxe suivante : ${Foo} Voir la liste complète http://www.cmake.org/wiki/cmake_useful_variables ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 12

Variables importantes PROJECT_SOURCE_DIR : Le dossier contenant les sources de votre projet PROJECT_BINARY_DIR : Le dossier de build de votre projet EXECUTABLE_OUTPUT_PATH : Le dossier où seront générés les exécutables LIBRARY_OUTPUT_PATH : Le dossier où seront générées les bibliothèques BUILD_SHARED_LIB : Compilation des bibliothèques en mode statique ou dynamique (OFF ou ON) CMAKE_BUILD_TYPE : Type de compilation du projet (Release, Debug, RelWithDebInfo) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 13

Les structures de contrôle Le langage de script de CMake fournit les structures basiques de contrôle o if then else o while o foreach o macro, function Exemple foreach o s e t (VAR a b c ) o foreach ( f ${VAR}) message ( ${ f }) o endforeach ( f ) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 14

Les structures de contrôle Exemple if o i f ( v a r ) some_command (... ) o e n d i f ( v a r ) o Les commandes seront appelées si var est différent de vide, 0, N, NO, OFF, FALSE, NOTFOUND, or NOTFOUND Exemple macro o macro ( h e l l o MESSAGE) message ( ${MESSAGE}) o endmacro ( h e l l o ) o h e l l o ( "hello world" ) # appel de la macro ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 15

Quelques commandes utiles o add_subdirectory o target_link_libraries o link_directories o option o add_definitions o configure_file o message o include Voir la documentation http://www.cmake.org/cmake/help/ v2.8.8/cmake.html#section_commands ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 16

Exemple plus complet CMakeLists.txt (lib) : add_library (foo SHARED foo.cpp ) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 17

Exemple plus complet CMakeLists.txt (app) : add_executable ( app main.cpp ) target_link_libraries ( app foo ) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 18

Exemple plus complet CMakeLists.txt (principal) : cmake_minimum_required (VERSION 2.8) project(myproject) set(executable_output_path ${PROJECT_BINARY_DIR}/bin) set(library_output_path ${PROJECT_BINARY_DIR}/lib) include_directories(${project_source _DIR}/foo) add_subdirectory ( foo ) add_subdirectory ( app ) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 19

Compilation et exécution : ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 20

Exercice 2 But o Ecrire son premier CMakeLists.txt pour générer un makefile (ou une solution Visual Studio). On utilisera les commandes CMake o add_executable, o include_directories, o add_library, o option, o link_directories et target_link_libraries ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 21

Exercice 2 1. Prendre connaissance du contenu du dossier o fichiers main.cpp, foo.h, foo.cpp 2. Ecrire un fichier CMakeLists.txt pour générer un binaire à partir de main.cpp et foo.cpp 3. Générer le makefile, compiler, exécuter 4. Reprendre les 2 points précédents en générant une bibliothèque foo à partir de foo.cpp et foo.h 5. (On pourra tester avec $BUILD_SHARED_LIBS à ON et OFF). ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 22

Import de biblio externes Se fait par la commande find_package. Exemple : o find_package (VTK REQUIRED) o if(vtk_found) o include(${vtk_use_file}) o endif(vtk_found) La distribution de CMake fournit des scripts de recherche de packages pour un certain nombre de bibliothèques externes : o VTK, ITK, Boost, Qt, OpenCV, etc, o Mais parfois il faut écrire son propre script de recherche! ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 23

Ecriture FindXXX.cmake Marche à suivre : o Ecrire un fichier FindXXX.cmake o Dire à cmake où aller le chercher o Importer votre lib Commandes cmake utiles o find_path et find_library o Exemple avec lib foo ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 24

Ecriture FindXXX.cmake FindFOO.cmake o find_path (LIBFOO_INCLUDE_DIR foo.h HINTS /usr/include/foo PATH_SUFFIXES foo) o find_library(libfoo_library foo HINTS /usr/lib) set(libfoo_libraries ${LIBFOO_LIBRARY} ) set(libfoo_include_dirs ${LIBFOO_INCLUDE_DIR} ) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 25

Ecriture FindXXX.cmake Dire à cmake où aller le chercher o On utilise CMAKE_MODULE_PATH o set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake" ) Importer la lib FOO o find_package (FOO) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 26

Exercice 3 But o Définir la bibliothèque Foo comme une bibliothèque externe qui sera importée pour compiler le projet exercice3 On utilisera les commandes find_package, find_path et find_library Aller dans le dossier exercice3 et prendre connaissance de son contenu o un dossier app qui contient le projet exo3 o un dossier lib qui contient le projet FOO ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 27

Exercice 3 Ecrire le fichier CMakeLists.txt nécessaire pour générer le projet FOO qui correspond à la bibliothèque foo (on préfèrera une bibliothèque partagée) Générer et compiler la bibliothèque foo dans un sous dossier 'build du dossier foo Vérifier que tout est compilé (il doit y avoir un fichier libfoo.so quelque part dans le dossier de build, ou dans un sous dossier de build appelé lib) Remplir le fichier app/findfoo.cmake ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 28

Exercice 3 Ecrire le fichier CMakeLists.txt pour générer le projet exercice3 (l'exécutable portera le même nom) Dans un sous dossier build du dossier app, générer et compiler le makefile (attention, il faut renseigner des chemins pour que la configuration et la compilation marchent) ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 29

Reference Alexandre Abadie IR SED INRIA-Saclay Alexandre.Abadie@inria.fr ENVOL 2012 JC Souplet et A Abadie - Création de composants logiciels avec CMake 30