Académique Documents
Professionnel Documents
Culture Documents
Makefile
INFO9/10
Sébastien Lengagne
2019-2020
1 / 13
Compilation
Makefile
1 Compilation
2 Makefile
2 / 13
Compilation
Makefile
3 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
1. https:
//openclassrooms.com/courses/c-maitriser-le-compilateur-g
4 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
1. https:
//openclassrooms.com/courses/c-maitriser-le-compilateur-g
4 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
1. https:
//openclassrooms.com/courses/c-maitriser-le-compilateur-g
4 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
1. https:
//openclassrooms.com/courses/c-maitriser-le-compilateur-g
4 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
1. https:
//openclassrooms.com/courses/c-maitriser-le-compilateur-g
4 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Le linkage
2. http://www.commentcamarche.net/faq/
14440-la-compilation-et-les-modules-en-c-et-en-c
5 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Le linkage
Les compilateurs
gcc,
6 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Les compilateurs
gcc,
Visual C++,
6 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Les compilateurs
gcc,
Visual C++,
Intel C++ Compiler,
6 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Les compilateurs
gcc,
Visual C++,
Intel C++ Compiler,
Clang,
6 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Les compilateurs
gcc,
Visual C++,
Intel C++ Compiler,
Clang,
d’autres sur :
https://en.wikipedia.org/wiki/List_of_compilers
6 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Principe de fonctionnement
Compilation
Les compilateurs
Makefile
Options de Compilation
Options de Compilation
7 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile
3. extrait de http://gl.developpez.com/tutoriel/outil/makefile/
8 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile
3. extrait de http://gl.developpez.com/tutoriel/outil/makefile/
8 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile
3. extrait de http://gl.developpez.com/tutoriel/outil/makefile/
8 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile
Prenons un exemple :
(Ici, on peut le compiler facilement en faisant gcc hello.c main.c
3. extrait de http://gl.developpez.com/tutoriel/outil/makefile/
8 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile
Prenons un exemple :
(Ici, on peut le compiler facilement en faisant gcc hello.c main.c
mais on va voir comment le faire proprement)
3. extrait de http://gl.developpez.com/tutoriel/outil/makefile/
8 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
9 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
9 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
9 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
cible d’une autre règle, cette régle est à son tour évaluée.
9 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
cible d’une autre règle, cette régle est à son tour évaluée.
2 Lorsque l’ensemble des dépendances est analysé les différentes
9 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
cible d’une autre règle, cette régle est à son tour évaluée.
2 Lorsque l’ensemble des dépendances est analysé les différentes
Makefile minimal
hello : hello.o main.o
gcc -o hello hello.o main.o
hello.o : hello.c
gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic
main.o : main.c
gcc -o main.o -c main.c -W -Wall -ansi -pedantic
10 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Makefile enrichi
all : hello # permet de faire plusieurs executable
Divers
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Divers
%.o : %.c
commandes
la génération de liste de fichiers objets,
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Divers
%.o : %.c
commandes
la génération de liste de fichiers objets,
l’ajout de conditions (si DEBUG...)
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Divers
%.o : %.c
commandes
la génération de liste de fichiers objets,
l’ajout de conditions (si DEBUG...)
l’ajout de sous makefile
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Divers
%.o : %.c
commandes
la génération de liste de fichiers objets,
l’ajout de conditions (si DEBUG...)
l’ajout de sous makefile
l’utilisation de la commande “pkgconfig” pour récupérer les
informations nécessaires
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Divers
%.o : %.c
commandes
la génération de liste de fichiers objets,
l’ajout de conditions (si DEBUG...)
l’ajout de sous makefile
l’utilisation de la commande “pkgconfig” pour récupérer les
informations nécessaires
Plus d’info sur :
http://gl.developpez.com/tutoriel/outil/makefile/
12 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Conclusions
13 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Conclusions
13 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Conclusions
13 / 13
Présentation
Makefile minimal
Compilation
Makefile enrichi
Makefile
Divers
Conclusions
Conclusions
13 / 13
Compilation
Makefile
Introduction
4. https://cmake.org/
14 / 13
Compilation
Makefile
Introduction
4. https://cmake.org/
14 / 13
Compilation
Makefile
Introduction
15 / 13
Compilation
Makefile
Syntaxe
16 / 13
Compilation
Makefile
Syntaxe
16 / 13
Compilation
Makefile
Exemple de base
17 / 13
Compilation
Makefile
Exemple de base
Reprenons l’exemple Hello World et créons un CMakeLists.txt dans
le répertoire principal.
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
add executable (Hello main.c hello.c)
Exemple de base
Reprenons l’exemple Hello World et créons un CMakeLists.txt dans
le répertoire principal.
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
add executable (Hello main.c hello.c)
18 / 13
Compilation
Makefile
18 / 13
Compilation
Makefile
18 / 13
Compilation
Makefile
18 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
19 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
mettre tous les fichiers source (.c, .cpp) dans un répertoire src
19 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
mettre tous les fichiers source (.c, .cpp) dans un répertoire src
mettre tous les fichiers d’entete (.hpp, .h) dans include
19 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
mettre tous les fichiers source (.c, .cpp) dans un répertoire src
mettre tous les fichiers d’entete (.hpp, .h) dans include
mettre les fichiers d’application (contenant le main) à part
(dans apps, bin, exe, ...)
19 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
mettre tous les fichiers source (.c, .cpp) dans un répertoire src
mettre tous les fichiers d’entete (.hpp, .h) dans include
mettre les fichiers d’application (contenant le main) à part
(dans apps, bin, exe, ...)
mettre les fichiers de test à part (dans tests)
19 / 13
Compilation
Makefile
Il est d’usage de :
faire le cmake dans un répertoire build
mettre tous les fichiers source (.c, .cpp) dans un répertoire src
mettre tous les fichiers d’entete (.hpp, .h) dans include
mettre les fichiers d’application (contenant le main) à part
(dans apps, bin, exe, ...)
mettre les fichiers de test à part (dans tests)
Bien sûr il ne faut pas oublier de commenter son code ! !
19 / 13
Compilation
Makefile
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
add executable (Hello apps/main.c src/hello.c)
20 / 13
Compilation
Makefile
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
add executable (Hello apps/main.c src/hello.c)
20 / 13
Compilation
Makefile
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
include directories( include)
add executable (Hello apps/main.c src/hello.c)
20 / 13
Compilation
Makefile
21 / 13
Compilation
Makefile
21 / 13
Compilation
Makefile
21 / 13
Compilation
Makefile
Il est possible de créer Crée des variables avec les fichiers à compiler
22 / 13
Compilation
Makefile
Il est possible de créer Crée des variables avec les fichiers à compiler
CMakeLists.txt
cmake minimum required( VERSION 2.8 )
project (hello)
set(HELLO SOURCES src/hello.c src/byebye.c ...)
include directories( include)
add library(toto SHARED ${HELLO SOURCES})
add executable (Hello apps/main.c)
target link libraries(Hello toto)
22 / 13
Compilation
Makefile
23 / 13
Compilation
Makefile
23 / 13
Compilation
Makefile
23 / 13
Compilation
Makefile
24 / 13
Compilation
Makefile
24 / 13
INFO9/10
INFO9/10
Sébastien Lengagne
1 / 12
INFO9/10
2 / 12
INFO9/10
3 / 12
INFO9/10
CMakeLists.txt
cmake minimum required(VERSION 2.8)
project( DisplayImage )
find package( OpenCV REQUIRED ) # REQUIRED ou QUIET
include directories (${OPENCV INCLUDE DIRS})
add definitions (${OPENCV FLAGS})
add executable( DisplayImage apps/main.cpp )
target link libraries( DisplayImage ${OpenCV LIBS} )
5 / 12
INFO9/10
Utilisation de conditions
CMakeLists.txt
cmake minimum required(VERSION 2.8)
project( DisplayImage )
find package( OpenCV QUIET )
if (OpenCV FOUND)
add executable( DisplayImage apps/main.cpp )
target link libraries( DisplayImage ${OpenCV LIBS} )
else (OpenCV FOUND)
message(FATAL ERROR ”opencv not found”)
endif (OpenCV FOUND)
6 / 12
INFO9/10
7 / 12
INFO9/10
8 / 12
INFO9/10
cmake -DPARAM=POLYTECHGE ..
Certains de ces paramètres peuvent être des variable de CMake comme
CMAKE INSTALL PREFIX.
Ceci est équivalent à mettre dans le Fichier CMakeLists.txt
CMakeLists.txt
set( PARAM POLYTECHGE)
9 / 12
INFO9/10
10 / 12
INFO9/10
version.h.in
#define VERSION MAJOR ”@HELLO VERSION MAJOR@”
CMakeLists.txt
project(hello VERSION 1.0.1)
configure file( version.h.in ${PROJECT SOURCE DIR}/include/version.h)
main.c
# include ”version.h”
...
std : :cout<<”version = ”<< VERSION MAJOR <<std : :endl ;
Exercice :
passer le lien de l’image à travers le cmake pour avoir ces trois
comportements.
12 / 12
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
INFO9/10
Sébastien Lengagne
2019-2020
séance 9
1 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
1 Les licences
2 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
Les licences
1. http ://www.logidee.com/lib/exe/fetch.php/licences.pdf
3 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
5 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
Le projet GNU
6 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
7 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
8 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
d’autres licences
La WTFPL : ”Do What The Fuck You Want to Public
License” elle permet la libre redistribution et modification
d’une œuvre sans aucune restriction.
Donateware ou donationware :freeware dont la rétribution
est laissée à l’appréciation de l’utilisateur.
Careware :est un type de logiciel généralement gratuit, mais
dont l’auteur invite les utilisateurs à faire un don en faveur
d’une association caritative de son choix.
Un carticiel (postcardware ou cardware) est un partagiciel
dont l’auteur demande, pour seule rétribution d’une utilisation
régulière, l’envoi d’une carte postale.
Beerware : confère à l’utilisateur le droit d’utiliser un
programme ou de faire ce qu’il veut du code source, à
condition de conserver la même licence. Si l’utilisateur
rencontre l’auteur et considère que le logiciel de ce dernier est
utile, il est encouragé à lui offrir une bière.
9 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
pré-requis
10 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
Installation
11 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
12 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
CMakeLists.txt
configure file(HelloConfig.cmake.in ”${PROJECT BINARY DIR}/HelloConfig.cmake” @ONLY)
13 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
CMakeLists.txt
set( CMAKE PREFIX PATH
”${CMAKE INSTALL PREFIX}/lib/cmake” )
14 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
15 / 16
Les licences CMake installation et ré-utilisation Comment installer sans les droits admin (Linux)
16 / 16
INFO9/10
INFO9/10
Sébastien Lengagne
séance 12
1 / 31
INFO9/10
1 Doxygen
3 Rappels héritage
4 Fonction virtuelle
2 / 31
INFO9/10
Doxygen : Introduction
Doxygen : introduction
Pour cela, il tient compte de la grammaire du langage dans lequel est écrit
le code source, ainsi que des commentaires s’ils sont écrits dans un format
particulier.
Le code de Doxygen a été écrit en grande partie par Dimitri van Heesch.
3 / 31
INFO9/10
Style C avec un !
/* !
* ... Documentation ...
*/
5 / 31
INFO9/10
6 / 31
INFO9/10
7 / 31
INFO9/10
8 / 31
INFO9/10
example main.cpp
class MaClasse{
public :
MaClasse(){ toto = 4 ; tata = 2 ;}
∼MaClasse(){ }
void F1(){std : :cout<<MaClasse : :F1()<<std : :endl ;}
int toto ;
private :
void F2(){std : :cout<<MaClasse : :F2()<<std : :endl ;}
int tata ;
};
void main(){
MaClasse o ;
o.F1() ; // pas de problème
std : :cout<< o.toto <<std : :endl ; // pas de problème
o.F2() ; // ne compile pas
std : :cout<< o.tata <<std : :endl ; // ne compile pas
}
9 / 31
INFO9/10
a
Fonctions et classes amies
a. http://casteyde.christian.free.fr/cpp/cours/online/x3010.html
Il peut être nécessaire d’avoir des fonctions qui ont un accès illimité aux
champs d’une classe. En général, l’emploi de ces fonctions traduit un
manque d’analyse dans la hiérarchie des classes, mais pas toujours. Elles
restent donc nécessaires malgré tout.
Il est également possible de faire une classe amie d’une autre classe, mais
dans ce cas, cette classe devrait peut-être être une classe fille. L’utilisation
des classes amies peut traduire un défaut de conception.
10 / 31
INFO9/10
Fonctions amies
Les fonctions amies ne sont pas des méthodes de la classe cependant
(cela n’aurait pas de sens puisque les méthodes ont déjà accès aux
membres de la classe).
Example amie.cpp
class A
{
int a ; // Une donnée privée.
friend void ecrit a(int i) ; // Une fonction amie.
};
A essai ;
void ecrit a(int i)
{
essai.a=i ; // Initialise a.
return ;
}
11 / 31
INFO9/10
Fonctions amies
Généralement on utilise la notion d’amie pour surcharger l’opérateur <<
pour l’affichage.
Example amie.cpp
class A
{
int a ; // Une donnée privée.
friend std : :ostream& operator << (std : :ostream& flux,
A const& objet a) ;
};
friend std : :ostream& operator << (std : :ostream& flux,
A const& objet a)
{
flux<<“ a = ”<< objet a.a<<std : :endl ;
return flux ;
}
12 / 31
INFO9/10
Classes amies
Pour rendre toutes les méthodes d’une classe amies d’une autre classe, il
suffit de déclarer la classe complète comme étant amie.
Pour cela, il faut encore une fois utiliser le mot clé friend avant la
déclaration de la classe, à l’intérieur de la classe cible.
Cette fois encore, la classe amie déclarée ne sera pas une sous-classe de la
classe cible, mais bien une classe de portée globale.
13 / 31
INFO9/10
Classes amies
Example amie.cpp
class Hote {
friend class Amie ; // Toutes les méthodes de Amie sont amies.
int i ; // Donnée privée de la classe Hote.
public :
Hote( ) { i=42 ; }
};
Hote h ; // variable globale
class Amie {
public :
void print hote( ) { printf(“i = %d’\n’, h.i) ; }
};
int main(void) {
Amie a ;
a.print hote() ;
return 0 ; }
14 / 31
INFO9/10
Classes amies
On remarquera plusieurs choses importantes.
Deuxièmement, les amis ne sont pas hérités. ( si une classe A est amie
d’une classe B et que la classe C est une classe fille de la classe B, alors A
n’est pas amie de la classe C par défaut). Encore une fois, il faut la
déclarer amie explicitement.
16 / 31
INFO9/10
Rappels héritage :
MaClasseMere.h MaClasseMere.cpp
class MaClasseMere ] include “MaClasseMere.h”
{
public : MaClasseMere : :MaClasseMere(){
MaClasseMere() ; ...}
∼MaClasseMere() ;
void fonction1() ; MaClasseMere : :∼MaClasseMere(){
std : :string value ; ...}
protected :
void fonction2() ; MaClasseMere : :fonction1(){
double reel ; ...}
private :
int entier ; MaClasseMere : :fonction2(){
}; ...}
17 / 31
INFO9/10
Rappels héritage :
Fonction virtuelle :
Fonction virtuelle
19 / 31
INFO9/10
Fonction virtuelle :
Fonction virtuelle
B b;
b.F1() ; // affiche ”B : :F1()”
b.F2() ; // affiche ”B : :F2()”
20 / 31
INFO9/10
Fonction virtuelle :
21 / 31
INFO9/10
Une fonction virtuelle pure est une fonction qui n’est pas définie dans la
classe mère mais qui doit être définie dans les classes filles.
L’utilisation d’une fonction virtuelle pure rend la classe mère abstraite (on
ne peut pas créer un objet de la classe mère)
22 / 31
INFO9/10
23 / 31
INFO9/10
Le chargement dynamique
25 / 31
INFO9/10
26 / 31
INFO9/10
27 / 31
INFO9/10
28 / 31
INFO9/10
Défintion : auto-complétion
29 / 31
INFO9/10
30 / 31
INFO9/10
Présentation de l’exemple
31 / 31