Environnement de développement / Projet de programmation 1 (J1INPW01) Compilation



Documents pareils
Cours Langage C/C++ Programmation modulaire

Quelques éléments de compilation en C et makefiles

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

Algorithmique et Programmation, IMA

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

Chaîne de production d un programme

Outils pour la pratique

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

Programmation impérative

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

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

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

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)

Chapitre 10 : Logiciels

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

Notes de Cours - Programmation Pascal Ferraro

Votre premier projet Android

Arguments d un programme

Les chaînes de caractères

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

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Le langage C. Séance n 4

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

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

Cours Programmation Système

Cours de Programmation 2

Construction de logiciel et packaging

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

wxwidgets dans un environnement Microsoft Windows

Guide d'installation rapide TFM-560X YO.13

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

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

Comment Créer une Base de Données Ab Initio

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

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Le prototype de la fonction main()

Introduction au langage C

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

Optimisation de logiciels de modélisation sur centre de calcul

Programmation système I Les entrées/sorties


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

Installation et compilation de gnurbs sous Windows

Les processus légers : threads. Système L3, /31

Instructions Mozilla Thunderbird Page 1

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Application Form/ Formulaire de demande

Cours de programmation avancée. Le langage C. Université du Luxembourg

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

INSTALLATION ET CONFIGURATION DE OPENLDAP

Configurer la supervision pour une base MS SQL Server Viadéis Services

Programmation C. J.-F. Lalande. 15 novembre 2012

Gestion Electronique de Document (ECM/GED)

Les structures. Chapitre 3

Programmation en langage C

Conventions d écriture et outils de mise au point

English Q&A #1 Braille Services Requirement PPTC Q1. Would you like our proposal to be shipped or do you prefer an electronic submission?

LE FORMAT DES RAPPORTS DU PERSONNEL DES COMMISSIONS DE DISTRICT D AMENAGEMENT FORMAT OF DISTRICT PLANNING COMMISSION STAFF REPORTS

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

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

Unix : Programmation Système

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

Projet De Stijl Plate-forme pour robots mobiles

CLIM/GTP/27/8 ANNEX III/ANNEXE III. Category 1 New indications/ 1 re catégorie Nouvelles indications

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

I00 Éléments d architecture

Archived Content. Contenu archivé

Environnements et Outils de Développement Cours 1 Introduction

Exercices sur SQL server 2000

I. Introduction aux fonctions : les fonctions standards

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

POLICY: FREE MILK PROGRAM CODE: CS-4

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

Support de Cours de Langage C. Christian Bac

Les ACL Cisco. F. Nolot Master 2 Professionnel STIC-Informatique 1

Compléter le formulaire «Demande de participation» et l envoyer aux bureaux de SGC* à l adresse suivante :

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

Polytech Montpellier IG PROJET C Réseaux sociaux : recherche de composantes fortement connexes

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

Langage Éric Guérin 5 octobre 2010

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

Cedric Dumoulin (C) The Java EE 7 Tutorial

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Procédure d installation d AMESim 4.3.0

Chapitre 2 Devine mon nombre!

vtiger CRM Pack de langue Manuel d instalation version Française 0.1

Practice Direction. Class Proceedings

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

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Installation de Snort sous Fedora

Les commandes relatives aux réseaux

SPOOL 2 VOLUBIS. VOLUBIS Tel rue du Tertre Fax Carquefou cmasse@volubis.fr

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

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

TP1. Outils Java Eléments de correction

Programmation système de commandes en C

Transcription:

Environnement de développement / Projet de programmation 1 (J1INPW01) Compilation

Plan gcc (compilation et compilation séparée) Make (Makefile) Makefile générique 2

Compilation simple #include <stdio.h> #define VALEUR 5 int main(void) { int i = VALEUR; printf("bonjour a tous %d\n", i) ; return 0 ; } La commande gcc bonjour.c Produit un fichier a.out. Qui peut être exécuté. 3

Compilation simple (pas si simple) Pour générer le fichier a.out, gcc a également besoin : - du fichier stdio.h - du fichier libc.a (pour la fonction printf) 4

Compilation simple (pas si simple) La «compilation» se déroule en fait en 3 phases : 1. Le préprocesseur (cpp) 2. La compilation à proprement parlé cc+ as 3. L édition de lien (ld) ar est une application extérieure à gcc qui permet d archiver plusieurs objets (fichiers suffixés.o) en une bibliothèque (fichier suffixé.a). 5

gcc : Options Pour arrêter le compilateur a une certaine phase -E : s'arrête à la premiere phase (génère des.i) -S : s'arrête avant l'assembleur (génère des.s) -c : s'arrête à la fin de la second phase (génère des.o) Pour reprendre le travail depuis une certaine phase gcc accepte plusieurs fichiers d'entrée sur la ligne de commande et, pour chacun d'eux, en fonction du suffixe, leur applique uniquement les phases nécessaires. La dernière phase (l'édition de liens) n'est exécutée qu'une fois, globalement, près avoir effectué toutes les phases précédentes nécessaires sur tous les fichiers. 6

gcc : Autres options Pour augmenter le contexte de la compilation -I<rep> : ajoute <rep> à la liste des répertoires consultés par le préprocesseur pour trouver les fichiers cités dans les commandes de la forme #include <...> -l<nom> : invite l éditeur de liens à considérer la bibliothèque lib<nom>.a pour y rechercher la définition d identificateur utilisé et pas défini. libc.a est toujours considérée -L<rep> : ajoute <rep> à la liste des répertoirs consultés par l éditeur de liens pour trouver les bibliothèques à considérer. 7

Options diverses -std=c99 : spécifie le standard que le code source satisfait -o <fichier> : génère l exécutable dans <fichier> au lieu de a.out -g : place dans l exécutable des informations utiles au débugger (cf. chapitres suivants) -O2 : provoque certaines optimisations du code généré Rq : -g ou -02 il faut choisir -Wall : (Warning ALL) affiche un message pour toute forme un peu ambiguë relevée dans le code. 8

Compilation séparée C est quoi? Découper le code en plusieurs fichiers Compiler chaque fichier séparément Pourquoi découper le code en plusieurs fichiers? Plus lisible Plus modulaire Plus facile de travailler à plusieurs sur des fichiers différents Pourquoi re-compiler chaque fichier indépendamment? Plus rapide!!! (ex : compilation de libre office : plusieurs heures) => Outils pour générer la compilation séparée : make 9

Compilation séparée : exemple simple Pour développer un éditeur (edit)de texte en C on découpe le programme en plusieurs fichiers sources : kbd.c, display.c, files.c, command.c, main.c. Par ailleurs les définitions générales sont réparties sur 2 fichiers : defs.h et command.h. On trouve dans les fichiers : kbd.c, files.c, command.c les lignes suivantes : #include «defs.h» #include «command.h» On trouve dans les fichiers : display.c, main.c les lignes suivantes : #include «defs.h» Quelles commandes pour générer l exécutable edit? Quel graphe de dépendances? 10

Makefile correspondant edit : main.o kbd.o command.o display.o files.o gcc -o edit main.o kbd.o command.o \ display.o files.o main.o : main.c defs.h gcc -c main.c kbd.o : kbd.c defs.h command.h gcc -c kbd.c command.o : command.c defs.h command.h gcc -c command.c display.o : display.c defs.h gcc -c display.c files.o : files.c defs.h command.h gcc -c files.c clean : rm edit main.o kbd.o command.o \ display.o files.o 11

Syntaxe d un fichier Makefile Des règles + des définitions de variables [+ des directives] Une règle est constituée d un ensemble de cibles, d un ensemble de dépendances et d une séquence de commandes. Syntaxe : cible cible... : dependance dependance... commande commande Tabulation make interprète ces règles de la façon suivante. Pour chaque fichier cible, s'il n'existe pas, ou si sa date de dernière modification est plus ancienne que la date de dernière modification d'un des fichiers dépendances, alors il doit être construit, ou reconstruit, en exécutant successivement les commandes. 12

Syntaxe d un fichier Makefile Définition de variable : Syntaxe : <VARIABLE> = <EXPRESSION> Exemple 1 : OBJETS = main.o kbd.o command.o display.o files.o edit : $(OBJETS) gcc -o edit $(OBJETS) Exemple 2 : #Liste des fichiers *.c SOURCES = $(wildcard *.c) #remplace.c en.o dans la liste OBJETS = $(SOURCES:.c=.o) 13

Syntaxe d un fichier Makefile Variables implicites : CC : C Compiler (défaut : cc) CXX : C++ Compiler (défaut : g++) CFLAGS (options de compilation) CPPFLAGS (options du préprocesseur) LDFLAGS (options de l éditeur de lien) Exemples : CC = gcc CFLAGS = -g Wall std=c99 CPPFLAGS = -I../include LDFLAGS = -lm 14

Syntaxe d un fichier Makefile Directives : Instruction à l intention du «préprocesseur» de make Exemple 1 : include../makefile.vars Exemple 2 : ifeq ($(DEBUG),YES) CFLAGS = -g Wall std=c99 else CFLAGS = -02 Wall std=c99 endif 15

Syntaxe d un fichier Makefile Variables automatiques (valable dans les commandes) : $@ The file name of the target of the rule. $< The name of the first dependency. $? The names of all the dependencies that are newer than the target, with spaces between them. $^ The names of all the dependencies, with spaces between them. Exemple d utilisation kbd.o : kbd.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< 16

Makefile V2 CFLAGS = -g Wall std=c99 CPPFLAGS = -I../include SOURCES = $(wildcard *.c) OBJETS = $(SOURCES:.c=.o) edit : $(OBJETS) $(CC) -o $@ $^ main.o : main.c defs.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< kbd.o : kbd.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< command.o : command.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< display.o : display.c defs.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< files.o : files.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< clean : rm edit $(OBJETS) 17

Makefile V2 main.o : main.c defs.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< kbd.o : kbd.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< command.o : command.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< display.o : display.c defs.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< files.o : files.c defs.h command.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< Rq: il existe des règles implicites pour make : «-Compiling C programs n.o is made automatically from n.c with a recipe of the form $(CC) $(CPPFLAGS) $(CFLAGS) -c. -Compiling C++ programs n.o is made automatically from n.cc, n.cpp, or n.c with a recipe of the form $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c. -» Si une règle n a pas de commande, make va chercher la règle implicite qui s applique au motif. 18

Makefile V3 CFLAGS = -g Wall std=c99 CPPFLAGS = -I../include SOURCES = $(wildcard *.c) OBJETS = $(SOURCES:.c=.o) edit : $(OBJETS) $(CC) -o $@ $^ main.o : main.c defs.h kbd.o : kbd.c defs.h command.h command.o : command.c defs.h command.h display.o : display.c defs.h files.o : files.c defs.h command.h.phony : clean #indique à make d ignorer l éventuel fichier clean. clean : rm edit $(OBJETS) 19

Makefile générique Makefile V3 : doit être potentiellement modifié à chaque fois qu on modifie des #include. Sinon risque d incohérence dans le processus de compilation «Je comprends pas, le programme ne correspond pas aux sources :-(» L option «-M» de gcc permet de générer les règles de dépendances : gcc M $(CPPFLAGS) bonjour.c > depends.txt 20

Makefile V4 CFLAGS = -g Wall std=c99 CPPFLAGS = -I../include SOURCES = $(wildcard *.c) OBJETS = $(SOURCES:.c=.o) edit : $(OBJETS) $(CC) -o $@ $^ include depends.txt.phony : clean clean : rm edit $(OBJETS) depends.txt : $(SOURCES) $(CC) M $(CPPFLAGS) $(SOURCES) > depends.txt 21

What else all : cible par défaut (make <=> make all) VPATH : indique où chercher des fichiers. Utile si les.h se trouvent dans un autre répertoire (par exemple../include) make C <repertoire> : se place dans <repertoire> avant de lancer make. -> Makefile recursif Peut bien évidemment être utilisé pour générer autre chose qu un exécutable Ex: document pdf à partir de sources LaTeX... Intégrer la génération des tests et de la documentation Publier des pages web 22

Références Documentation sur gcc : http://gcc.gnu.org/onlinedocs/ Documentation sur «Make» : http://www.gnu.org/software/make/manual/ Quick Références (http://www.gnu.org/software/make/manual/html_node/quick- Reference.html#Quick-Reference) Wildcards (http://www.gnu.org/software/make/manual/html_node/wildcards.html#wildcards) Variables automatiques (http://www.gnu.org/software/make/manual/html_node/automatic- Variables.html#Automatic-Variables) How to use variables (http://www.gnu.org/software/make/manual/html_node/using- Variables.html#Using-Variables) Implicite rules (http://www.gnu.org/software/make/manual/html_node/implicit- Rules.html#Implicit-Rules) gcc M (http://www.gnu.org/software/make/manual/html_node/automatic- Prerequisites.html) 23