Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer...

30
Travaux Pratiques CMake Matthieu Herrb Ecole IDL2011, La Londes Les Maures, 5 au 9 d´ ecembre 2011

Transcript of Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer...

Page 1: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Travaux Pratiques CMake

Matthieu Herrb

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011

Page 2: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Licence

Ce document est sous licence

Creative Commons Paternite - Partage a l’Identique 3.0 non transpose.

Pour acceder a une copie de cette licence, merci de vous rendre a l’adresse suivante :

http://creativecommons.org/licenses/by-sa/3.0/

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 2/30

Page 3: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 3/30

Page 4: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Introduction

but : Mise en oeuvre de CMake pour gerer la compilation d’unprojet

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 4/30

Page 5: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Description

� Dining Hackers �

Variante de type jeu de role des philosophes et des spaghetti deDjikstra.

Quatre composantes :

dinnerd implemente le protocole

libdinner bibliotheque client

hungryhacker implemente un hacker

vdinner visualisation 3D (OpenGL)

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 5/30

Page 6: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 6/30

Page 7: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Premiere etape : compilation simple de dinnerd

creer un fichier CMakeLists.txt minimal

creer un fichier dinnerd/CMakeLists.txt minimal

executer cmake pour generer les outils de compilation

executer make puis make install.

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 7/30

Page 8: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Ecriture de CMakeLists.txt

Fichier source CMake produisant un Makefile. Contient :

des appels a des commandes CMake pour definir des variables,des proprietes et des cibles de compilation.

des tests pour controler le flux d’execution

Elements de syntaxe de CMake

commentaires : #

commandes : COMMAND(arg1 arg2 ...)

Listes : A; B; C

Variables : $VAR

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 8/30

Page 9: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Ecriture de CMakeLists.txt(2)

Macros utilisees dans un fichier simple :

CMAKE MINIMUN REQUIRED definit la version minimale decmake

PROJECT definit le nom du projet et les langages utilises

SUBDIRS definit les sous-repertoires a traiter

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 9/30

Page 10: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

CMakeLists.txt

CMAKE MINIMUM REQUIRED (VERSION 2 . 8 )

PROJECT ( d i n n e r C)

SUBDIRS( d i n n e r d )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 10/30

Page 11: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

dinnerd/CMakeLists.txt

Definit :

le nom du programme a compiler,

les fichiers sources qui le composent,

SET( dinnerd SRCS d i n n e r d . c )ADD EXECUTABLE( d i n n e r d ${dinnerd SRCS })INSTALL (TARGETS d i n n e r d DESTINATION b i n )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 11/30

Page 12: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Generation initiale

cmake .

Produit :

le Makefile principal

le Makefile dans le repertoire dinnerd

un ensemble de fichiers annexes CmakeFiles/*,CMakeCache.txt, ...

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 12/30

Page 13: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Compilation dans un repertoire separe

CMake permet de compiler dans un repertoire a part.Cela permet :

de partager les sources entre :

plusieurs versions de l’OS (32bits, 64bits)plusieurs variantes de configurationplusieurs OS differents

de nettoyer rapidement les resultats de compilation

de profiter de disque volatile plus rapide

mkdir obj

cd obj

cmake ..

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 13/30

Page 14: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Options de cmake

cmake --help affiche toutes les options connues

ccmake interface de configuration des options de compilation

cmake -DCMAKE INSTALL PREFIX=/usr/local specifie lerepertoire d’installation

make VERBOSE=1 affiche l’integralite des commandesexecutees par les makefiles generes.

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 14/30

Page 15: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Cibles de make

make help liste les cibles possibles

make ou make all compile le programme

make install installe le programme et les fichiers connexes

make clean nettoye le resultat de make all

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 15/30

Page 16: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 16/30

Page 17: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

bibliotheque

CMake prend en charge la compilation de bibliotheques pourdifferents types de systemes

statiques

dynamiques

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 17/30

Page 18: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Configuration de CMake pour libdinner

ADD LIBRARY definit une bibliotheque

SET TARGET PROPERTIES(... PROPERTITIES SO VERSION

...)

definit la version de la bibliotheque

ajouter libdinner dans le CMakeLists.txt du top-level

ecrire le fichier CMakeLists.txt de libdinner.

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 18/30

Page 19: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

libdinner/CMakeLists.txt

SET( l i b d i n n e r S R C S l i b d i n n e r . c )ADD LIBRARY( d i n n e r SHARED ${ l i b d i n n e r S R C S })

SET TARGET PROPERTIES( d i n n e rPROPERTIES SOVERSION 0 . 0 )

INSTALL (TARGETS d i n n e r DESTINATION l i b )INSTALL ( FILES d i n n e r . h DESTINATION i n c l u d e )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 19/30

Page 20: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 20/30

Page 21: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Compilation de hungryhacker

similaire a dinnerd

ajout de CMakelists.txt dans hungryhacker

utilisation de INCLUDE DIRECTORIES etTARGET LINK LIBRARIES pour referencer libdinner

a faire : installer le script sample.sh

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 21/30

Page 22: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

hungryhacker/CMakeLists.txt

SET( hungryhacker SRCS h a c k e r . c )ADD EXECUTABLE( h u n g r y h a c k e r ${hungryhacker SRCS })INCLUDE DIRECTORIES ( ${CMAKE SOURCE DIR}/ l i b d i n n e r )TARGET LINK LIBRARIES ( h u n g r y h a c k e r d i n n e r )INSTALL (TARGETS h u n g r y h a c k e r DESTINATION b i n )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 22/30

Page 23: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 23/30

Page 24: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Recherche de dependances

La commande FIND PACKAGE permet la recherche de dependancesvia une bibliotheques de procedures CMake pre-definies.

teste la presence de fichiers sur la machine

execute des commandes de compilation

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 24/30

Page 25: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Compilation de vdinner

similaire a hungryhacker

utilisation de FIND PACKAGE pour trouver les packagesOpenGL et X11

a faire : test pour glut moderne.

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 25/30

Page 26: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

hungryhacker/CMakeLists.txt

FIND PACKAGE( OpenGL )# FIND PACKAGE( g l u t )

SET( vdinner SRCS s r c / models . cs r c / models . hs r c / v d i n n e r . c )

ADD EXECUTABLE( v d i n n e r ${ vdinner SRCS })

SET(CMAKE C FLAGS −I $ {CMAKE SOURCE DIR}/ l i b d i n n e r )TARGET LINK LIBRARIES ( v d i n n e r d i n n e r g l u t GLU GL)

INSTALL (TARGETS v d i n n e r DESTINATION b i n )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 26/30

Page 27: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Agenda

1 Introduction

2 Compilation d’un programme simple

3 Compilation d’une bibliotheque

4 Options de compilation

5 Recherche de dependances

6 Packaging avec CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 27/30

Page 28: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Packaging avec CPack

CPack produit des regles pour gerer la preparation de ladistribution source ou binaire.

make package source cree un paquet source.

make package cree un paquet binaire.

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 28/30

Page 29: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

Parametrisation de la distribution

CMakeLists.txt : les variablesCPACK PACKAGE VERSION [MAJOR,MINOR,PATCH] definissentle numero de version. produit la macro PACKAGE VERSION

dans les entetes C.

utilise les directives INSTALL pour trouver les elements dupaquet binaire

INCLUDE(CPack) permet d’activer CPack

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 29/30

Page 30: Travaux Pratiques CMakeidl.pepi.inra.fr/attachments/article/52/cmake.pdf · 2011-12-16 · cr eer un chier CMakeLists.txt minimal cr eer un chier dinnerd/CMakeLists.txt minimal ex

CMakeLists.txt

CMAKE MINIMUM REQUIRED (VERSION 2 . 8 )PROJECT ( d i n n e r C)SUBDIRS( l i b d i n n e r d i n n e r d h u n g r y h a c k e r v d i n n e r )

# Packag ingINCLUDE( I n s t a l l R e q u i r e d S y s t e m L i b r a r i e s )

SET(CPACK PACKAGE DESCRIPTION SUMMARY” D i n i n g P h i l o s o p h e r s S i m u l a t i o n ”)

SET(CPACK PACKAGE VENDOR ” F e l i p e Bergo <b e r g o @ s e u l . org >”)SET( CPACK RESOURCE FILE LICENSE

”${CMAKE CURRENT SOURCE DIR}/ d i n n e r d /COPYING”)SET(CPACK PACKAGE VERSION MAJOR ”1”)SET(CPACK PACKAGE VERSION MINOR ”0”)

SET(CPACK GENERATOR ”DEB”)SET(CPACK DEBIAN PACKAGE MAINTAINER

” Matth ieu Herrb <m a t t h i e u . h e r r b @ l a a s . f r >”)

INCLUDE( CPack )

Ecole IDL2011, La Londes Les Maures, 5 au 9 decembre 2011 30/30