L utilitaire "make" et son inséparable Makefile



Documents pareils
Quelques éléments de compilation en C et makefiles

Cours Langage C/C++ Programmation modulaire

Le prototype de la fonction main()

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Évaluation et implémentation des langages

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

Algorithmique et Programmation, IMA

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

Programmation système I Les entrées/sorties


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

Environnements et Outils de Développement Cours 1 Introduction

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

Outils pour la pratique

Introduction au langage C

UE Programmation Impérative Licence 2ème Année

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours de Programmation 2

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

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

Compression de Données - Algorithme de Huffman Document de Conception

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Optimisation de logiciels de modélisation sur centre de calcul

Chapitre 10 : Logiciels

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Arguments d un programme

Cours 1 : La compilation

OS Réseaux et Programmation Système - C5

Traduction des Langages : Le Compilateur Micro Java

TP 1. Prise en main du langage Python

Les chaînes de caractères

Fiche n 14 : Import / Export avec PlanningPME

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

Testez votre installation. Créer un répertoire vide

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Langages et Concepts de Programmation Introduction à la programmation en langage C

3IS - Système d'exploitation linux - Programmation système

Conventions d écriture et outils de mise au point

Programmation système de commandes en C

Cours Programmation Système

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Chaîne de production d un programme

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

I00 Éléments d architecture

L informatique en BCPST

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation système en C/C++

1 Description générale de VISFIELD

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

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

Algorithmique et programmation : les bases (VBA) Corrigé

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

ALGORITHMIQUE ET PROGRAMMATION En C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours 1 : Qu est-ce que la programmation?

Cours de C/C++ par la pratique. Hugues Talbot

Remise à niveau d un programme JAVA du domaine public

Initiation. àl algorithmique et à la programmation. en C

Cours 6 : Tubes anonymes et nommés

Les processus. Système L3, /39

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Notes de Cours - Programmation Pascal Ferraro

Introduction à l algorithmique et à la programmation M1102 CM n 3

Gestion Electronique de Document (ECM/GED)

Exercice sur les Dockers

INFO-F-105 Language de programmation I Séance VI

TP Contraintes - Triggers

Préparation à l examen EFA en Macro

Déployer des applications Perl

IV- Comment fonctionne un ordinateur?

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Apprendre Java et C++ avec NetBeans

Bases de programmation. Cours 5. Structurer les données

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Simulation d un système de paiement par carte bancaire

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

Chapitre I Notions de base et outils de travail

RTDS G3. Emmanuel Gaudin

Le langage C. Séance n 4

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

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

Programmer en JAVA. par Tama

Introduction à la Programmation Parallèle: MPI

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Module 3. Création d objets utilisateur et ordinateur AD DS

La supervision avec NAGIOS

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

TP : Gestion d une image au format PGM

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

COURS AUTOCAD. Création et utilisation des blocs. b leclerc. ERP Jean Moulin METZ

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Présentation du langage et premières fonctions

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

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

Corrigés des premiers exercices sur les classes

Unix : Programmation Système

Transcription:

L utilitaire "make" et son inséparable Makefile

Compilation et exécution Programme source Analyse lexicale (scaning) Optimisation du code Programme abstrait (optimisé) Génération du code Séquence d unités lexicales Table de symboles Programme abstrait (code intermédiaire) Code exécutable (object code) compilateur Analyse syntaxique (parsing) Arbre syntaxique Analyse sémantique Chargeur/Éditeur de liens (Loader/Linker) Programme résultant Données d entré Ordinateur Données de sortie

Qu est-ce qu un Makefile? Makefile : fichier utilisable par la commande make «Makefile» (avec majuscule) est le nom utilisé par convention, attendu par make Suit un format et une syntaxe spécifiques Permet l exécution séquentielle de scripts conditionnée par des dépendances

Intérets de l utilisation de Makefile Développement == nombreuses tâches répétitives (compilation, sauvegarde, ) Dans le cas d un développement modulaire, l ordre de compilation devient crucial gestion de dépendances Permet de délivrer un logiciel sous forme de sources accompagnées d un makefile permettant la compilation sur la machine cible./configure && make && make install

Structure du Makefile Composé de deux parties: Déclaration des variables Déclaration des cibles

Les variables Une variable est identifiée par un nom unique «En majuscule» par convention Non typées Substituées par leur valeur Rend le Makefile plus lisible portable

Déclaration, affectation et utilisation d une variable <VARIABLE> = <VALEUR> $(<VARIABLE>) Ex: CC = gcc MYFILE = myprog.c myprog.o : $(MYFILE) $(CC) c $(MYFILE) NB : il existe plusieurs variables prédéfinies comme $^, $@, $<

Les cibles (target) Indiquent à make les parties «à atteindre» <CIBLE> : <DEPENDANCE> <ACTION> <CIBLE1> <CIBLE2> : <DEP1> <DEP2> <ACTION1> <ACTION2> NB : Tabulation devant l action! Si aucune cible n est donnée à make, il prendra la première cible du fichier Makefile Vérifie la «mise à jour» de la dépendance pour déterminer s il faut déclencher l action

Rappels sur la compilation Schéma habituel Fich1.c gcc -c Fich1.o gcc a.out Compilation Ou directement Édition de liens Fich1.c gcc Fich1.c -o monexec monexec

Bon_Fichier.c /* Bon_Fichier.c */ /* Description: */ /* Entrées/Paramètres: */ /* Sorties: */ #include <stdlib.h> #include "Bon_Fichier.h" int main(int argc, char **argv){ exit(exit_failure); return 0; }

Good_File.c /* Good_File.c */ /* Description: */ /* Inputs/Parms: */ /* Outputs: */ #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "Good_File.h" #define RCOK 0 int main(int argc, char **argv){ int parm1; parm1=rcok; parm1=checkifok(); assert (0<parm1); /*Suppose parm1 is positive*/ if (RCOK<>parm1) exit(exit_failure); exit(exit_success); }

Rappels sur les options de compilation -c supprime l édition de lien. Le code objet compilé se trouve dans le fichier d extension.o. -o renomme le traditionnel a.out avec le nom d exécutable de votre choix -g ajoute les informations pour déboguer à l aide de gdb ; on peut aussi utiliser l option ggdb (mais elle est légèrement différente, cf. man). -Wall (Warning all ) ajoute tous les messages d avertissements. Cette option ralentit la compilation mais accélère la mise au point du programme. -O2 optimise le code en taille et vitesse. Cette option accélère la vitesse d exécution.

Développement modulaire gcc -c Fich1.c Fich1.o gcc -c Fich2.c Fich2.o gcc -o monexec gcc -c Fich3.c Fich3.o

Comment le traduire sous forme de commandes gcc gcc c Fich1.c gcc c Fich2.c gcc c Fich3.c gcc Fich1.o Fich2.o Fich3.o o monexec Si l un des fichiers.c est «mis à jour», il faudra le recompiler (et lui seulement, cela suffit) et refaire l édition de lien complète pour atteindre notre cible. Et les.h? Peut-on automatiser et empêcher les erreurs?

Comment le traduire sous forme de Makefile CC = gcc PROGNAME = monexec SOURCE = Fich1.c Fich2.c Fich3.c all : $(PROGNAME) Fich1.o : Fich1.c $(CC) c Fich1.c Fich2.o : Fich2.c $(CC) c Fich2.c Fich3.o : Fich3.c $(CC) c Fich3.c Fich1.c Fich2.c Fich3.c gcc -c gcc -c gcc -c Fich1.o Fich2.o Fich3.o $(PROGNAME) : $(SOURCE:.c=.o) $(CC) $(SOURCE:.c=.o) o $(PROGNAME) gcc -o monexec

Augmenter la lisibilité et quelques astuces Mettez des commentaires # Ceci est un commentaire Indiquez les étapes de votre compilation en rajoutant des actions d affichage @echo Début édition de lien $(CC) $(SOURCE:.c=.o) o $(PROGNAME) @echo Fin édition de lien

Utilisez les variables prédéfinies cible : dep1 dep2 dep3 @echo $@ @echo $^ @echo $< Produira: cible dep1 dep2 dep3 dep1 $@ : Cible en cours $^ : Ensemble des dépendances $< : Première dépendance

Makefile avancé Généralisation des cibles Cible générique particulière.suffixes.suffixes :.c.h.o.c.o : $(CC) c $< Fonctionnera pour Fich1.c, Fich2.c,

Makefile # Insérer ici votre cartouche habituel # CC = gcc PROGNAME = monexec SOURCE = Fich1.c Fich2.c Fich3.c all : $(PROGNAME).SUFFIXES :.c.h.o.c.o : @echo Compilation de $< $(CC) c $< $(PROGNAME) : $(SOURCE:.c=.o) @echo Edition de liens pour générer $@ $(CC) $^ o $@ mrproper: clean : @echo Fait le menage rm f *.o $(PROGNAME) >make clean >make >make all >make CC=xlc