Environnement de développement



Documents pareils
Cours Langage C/C++ Programmation modulaire

Quelques éléments de compilation en C et makefiles

Algorithmique et Programmation, IMA

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

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

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

Conventions d écriture et outils de mise au point

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

Chapitre 10 : Logiciels

TP1. Outils Java Eléments de correction

La mémoire. Un ordinateur. L'octet. Le bit

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP 1 Prise en main de l environnement Unix

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

Environnements et Outils de Développement Cours 1 Introduction

Introduction au langage C

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

C.M. 1 & 2 : Prise en main de Linux

Chapitre I Notions de base et outils de travail

Une introduction à Java

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

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

TP1 : Initiation à l algorithmique (1 séance)

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

TP1 - Prise en main de l environnement Unix.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à la Programmation Parallèle: MPI

Programmation en langage C

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


TP Contraintes - Triggers

Tutoriel code::blocks

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

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

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

Premiers pas en Linux

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

Optimisation de logiciels de modélisation sur centre de calcul

Utilisation d objets : String et ArrayList

TP 1. Prise en main du langage Python

Licence Sciences et Technologies Examen janvier 2010

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

Eclipse atelier Java

Tour d'horizon Bureau client Daemon's Aller plus loin

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

Le langage C. Séance n 4

Installation et compilation de gnurbs sous Windows

Cours de Programmation 2

Systèmes d exploitation

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Chaîne de production d un programme

Manuel de System Monitor

ALERT NOTICE D UTILISATION DU DRIVER PC-TEXTE

Traitement de données

Programmation système de commandes en C

Business Talk IP Centrex. guide. web utilisateur. pour. les services standards

GUIDE Excel (version débutante) Version 2013

Architecture des ordinateurs

Boot Camp Guide d installation et de configuration

PIC EVAL Dev Board PIC18F97J60

EVOLUTION 7.1 Déroulement DREAM INFO 1 Dossier 23 Ciel Gestion Commerciale.

wxwidgets dans un environnement Microsoft Windows

Mode Opératoire Ciel Gestion commerciale V 12 et s (2006)

Introduction au Système d Exploitation Unix/Linux

Java Licence Professionnelle CISII,

Bon ben voilà c est fait!

Apprendre Java et C++ avec NetBeans

Fiche de version N 12.28a Nov SOMMAIRE

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

STAGE IREM 0- Premiers pas en Python

IFT Systèmes d exploitation - TP n 1-20%

Cours 14 Les fichiers

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

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)

Archivage des pièces comptables

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

Algorithmique et programmation : les bases (VBA) Corrigé

Tp 1 correction. Structures de données (IF2)

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

TME1 Installation et programmation en ILP1

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

TP, première séquence d exercices.

Cours d algorithmique pour la classe de 2nde

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Module Communication - Messagerie V6. Infostance. Messagerie

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Cours Programmation Système

Programmation Web. Madalina Croitoru IUT Montpellier

Débogage de code* Mardi 13 décembre Romaric DAVID Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

ADAPT: un modèle de transcodage des nombres. Une application des systèmes de production au développement

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

COMMUNICATION PC/MINITEL

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Bernard HAMM, Évelyne LAVOISIER

Introduction à l informatique en BCPST

Transcription:

Environnement de développement Bernard Vauquelin Université Bordeaux 1 4 février 2010

Introduction Plan général Compilation Mise au point Édition Documentation Gestion de versions Outils divers

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Objectifs pédagogiques Le but de cet enseignement est de présenter les fonctionnalités utiles au développement d applications. 1. compilation 2. édition du texte du programme 3. aide à la mise au point 4. édition de la documentation 5. gestion collaborative des versions Pour illustrer chacune de ces fonctionnalités on étudiera un outil de base : gcc, make, emacs, gdb, LATEX, svn.

Hiérarchie Unix /bin exécutables indispensables au démarrage /etc configuration du système /home les répertoires d accueil /lib bibliothèques indispensables au démarrage /tmp fichiers temporaires /usr applications normales /opt grosses applications optionnelles /var fichiers du système dont le contenu varie

Hiérarchie Unix /bin exécutables indispensables au démarrage /etc configuration du système /home les répertoires d accueil /lib bibliothèques indispensables au démarrage /tmp fichiers temporaires /usr applications normales /opt grosses applications optionnelles /var fichiers du système dont le contenu varie

Hiérarchie Unix (suite) /usr/bin exécutables normaux /usr/include fichiers d en-tête pour la compilation /usr/lib bibliothèques d exécution /usr/local applications locales /usr/share fichiers du système indépendants du processeur /usr/src sources d applications normales /usr/share/man le manuel /usr/local/ contient bin, include, lib, src, man,...

Hiérarchie Unix (suite) /usr/bin exécutables normaux /usr/include fichiers d en-tête pour la compilation /usr/lib bibliothèques d exécution /usr/local applications locales /usr/share fichiers du système indépendants du processeur /usr/src sources d applications normales /usr/share/man le manuel /usr/local/ contient bin, include, lib, src, man,...

Hiérarchie Unix (suite) /usr/bin exécutables normaux /usr/include fichiers d en-tête pour la compilation /usr/lib bibliothèques d exécution /usr/local applications locales /usr/share fichiers du système indépendants du processeur /usr/src sources d applications normales /usr/share/man le manuel /usr/local/ contient bin, include, lib, src, man,...

Conventions Pour une application simple prog on place les sources dans un répertoire src/prog. Ce répertoire contient les sources du programme (fichiers.c et.h par exemple) les sources de la documentation (fichiers.xml par exemple) un fichier README un fichier Makefile ou équivalent L installation (obtenue en principe par la commande : make install) doit placer l exécutable dans un répertoire bin (par exemple en /usr/local/bin/prog) le manuel d utilisation dans un répertoire man (p.ex. en /usr/local/man/man1/prog.1)

Conventions Pour une application simple prog on place les sources dans un répertoire src/prog. Ce répertoire contient les sources du programme (fichiers.c et.h par exemple) les sources de la documentation (fichiers.xml par exemple) un fichier README un fichier Makefile ou équivalent L installation (obtenue en principe par la commande : make install) doit placer l exécutable dans un répertoire bin (par exemple en /usr/local/bin/prog) le manuel d utilisation dans un répertoire man (p.ex. en /usr/local/man/man1/prog.1)

Conventions Pour une application simple prog on place les sources dans un répertoire src/prog. Ce répertoire contient les sources du programme (fichiers.c et.h par exemple) les sources de la documentation (fichiers.xml par exemple) un fichier README un fichier Makefile ou équivalent L installation (obtenue en principe par la commande : make install) doit placer l exécutable dans un répertoire bin (par exemple en /usr/local/bin/prog) le manuel d utilisation dans un répertoire man (p.ex. en /usr/local/man/man1/prog.1)

Introduction Plan de la section Compilation gcc make make (suite) Mise au point Édition Documentation Gestion de versions

Une compilation simple Soit le fichier bonjour.c suivant. #i n c l u de <s t d i o. h> i n t main ( void ) { p r i n t f ( Bonjour a t o u s \n ) ; return 0 ; } Alors la commande gcc bonjour.c produit un fichier a.out suivant le schéma suivant.

gcc lit le fichier source bonjour.c et construit le fichier exécutable a.out

Les phases de compilation Les 3 phases essentielles sont : 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).

Les phases de compilation Les 3 phases essentielles sont : 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).

Les phases de compilation Les 3 phases essentielles sont : 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).

Options de gcc Pour arrêter le compilateur à une certaine phase -E : s arrête à la première 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, après avoir effectué toutes les phases précédentes nécessaires sur tous les fichiers.

Options de gcc Pour arrêter le compilateur à une certaine phase -E : s arrête à la première 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, après avoir effectué toutes les phases précédentes nécessaires sur tous les fichiers.

Autres options Pour augmenter le contexte de la compilation -Irep : 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 <...> -lxxx : invite l éditeur de liens à considérer la bibliothèque libxxx.a pour y rechercher la définition d identificateur utilisé et pas défini (la bibliothèque libc.a est toujours considérée ; les bibliothèques sont considérées dans l ordre d apparition sur la ligne de commande) -Lrep : ajoute rep à la liste des répertoires consultés par l éditeur de liens pour trouver les bibliothèques à considérer

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 debugger -O2 : provoque une certaine optimisation du code généré -Wall : affiche un message pour toute forme un peu ambiguë relevée dans le programme par le compilateur

Un cas simple Pour développer un éditeur 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épartis sur 2 fichiers : defs.h et command.h. On décrit alors la compilation de l application par le fichier Makefile suivant.

Un cas simple Pour développer un éditeur 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épartis sur 2 fichiers : defs.h et command.h. On décrit alors la compilation de l application par le fichier Makefile suivant.

e d i t : main. o kbd. o command. o d i s p l a y. o f i l e s. o cc o e d i t main. o kbd. o command. o \ d i s p l a y. o f i l e s. o main. o : main. c d e f s. h cc c main. c kbd. o : kbd. c d e f s. h command. h cc c kbd. c command. o : command. c d e f s. h command. h cc c command. c d i s p l a y. o : d i s p l a y. c d e f s. h cc c d i s p l a y. c f i l e s. o : f i l e s. c d e f s. h command. h cc c f i l e s. c c l e a n : rm e d i t main. o kbd. o command. o \

Il suffit de faire make pour compiler et obtenir l exécutable edit. Il suffira ensuite de refaire make chaque fois qu on aura modifié certains fichiers sources, pour recompiler edit. Le fichier, qui se nomme normalement Makefile, est constitué de règles de la forme suivante. c i b l e c i b l e... : dependance dependance... commande commande... make interprète ces règles de la facon 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 dependance, alors il doit être construit, ou reconstruit, en exécutant successivement les commandes indiquées. Remarque : La cible clean est particulière : aucun fichier de ce nom n est jamais censé exister.

Il suffit de faire make pour compiler et obtenir l exécutable edit. Il suffira ensuite de refaire make chaque fois qu on aura modifié certains fichiers sources, pour recompiler edit. Le fichier, qui se nomme normalement Makefile, est constitué de règles de la forme suivante. c i b l e c i b l e... : dependance dependance... commande commande... make interprète ces règles de la facon 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 dependance, alors il doit être construit, ou reconstruit, en exécutant successivement les commandes indiquées. Remarque : La cible clean est particulière : aucun fichier de ce nom n est jamais censé exister.

Il suffit de faire make pour compiler et obtenir l exécutable edit. Il suffira ensuite de refaire make chaque fois qu on aura modifié certains fichiers sources, pour recompiler edit. Le fichier, qui se nomme normalement Makefile, est constitué de règles de la forme suivante. c i b l e c i b l e... : dependance dependance... commande commande... make interprète ces règles de la facon 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 dependance, alors il doit être construit, ou reconstruit, en exécutant successivement les commandes indiquées. Remarque : La cible clean est particulière : aucun fichier de ce nom n est jamais censé exister.

Il suffit de faire make pour compiler et obtenir l exécutable edit. Il suffira ensuite de refaire make chaque fois qu on aura modifié certains fichiers sources, pour recompiler edit. Le fichier, qui se nomme normalement Makefile, est constitué de règles de la forme suivante. c i b l e c i b l e... : dependance dependance... commande commande... make interprète ces règles de la facon 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 dependance, alors il doit être construit, ou reconstruit, en exécutant successivement les commandes indiquées. Remarque : La cible clean est particulière : aucun fichier de ce nom n est jamais censé exister.

Utiliser des variables OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o e d i t : $ (OBJECTS) cc o e d i t $ (OBJECTS) main. o : main. c d e f s. h cc c main. c kbd. o : kbd. c d e f s. h command. h cc c kbd. c command. o : command. c d e f s. h command. h cc c command. c d i s p l a y. o : d i s p l a y. c d e f s. h cc c d i s p l a y. c f i l e s. o : f i l e s. c d e f s. h command. h cc c f i l e s. c c l e a n : rm f e d i t $ (OBJECTS)

Utiliser les règles implicites OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o e d i t : $ (OBJECTS) cc o e d i t $ (OBJECTS) main. o : d e f s. h kbd. o : d e f s. h command. h command. o : d e f s. h command. h d i s p l a y. o : d e f s. h f i l e s. o : d e f s. h command. h.phony : c l e a n c l e a n : rm f e d i t $ (OBJECTS) La cible bidon.phony indique à make d ignorer l existence

Utiliser des cibles multiples OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o e d i t : $ (OBJECTS) cc o e d i t $ (OBJECTS) $ (OBJECTS) : d e f s. h kbd. o command. o f i l e s. o : command. h.phony : c l e a n c l e a n : rm e d i t $ (OBJECTS)

Quelques options de make -f fichier : consulte fichier plutôt que Makefile -n : affiche, sans les exécuter, les commandes nécessaires -k : ignore les erreurs qui pourraient survenir dans l exécution des commandes cible : construit la cible indiquée plutôt que la première cible trouvée

Un autre exemple très simple # Pour c o n s t r u i r e un c o u p l e de programmes.phony : a l l c l e a n a l l : C e l s i u s 2 K e l v i n K e l v i n 2 C e l s i u s C e l s i u s 2 K e l v i n : C e l s i u s 2 K e l v i n. c p a r a m e t r e s. h gcc C e l s i u s 2 K e l v i n. c o C e l s i u s 2 K e l v i n K e l v i n 2 C e l s i u s : K e l v i n 2 C e l s i u s. c p a r a m e t r e s. h gcc K e l v i n 2 C e l s i u s. c o K e l v i n 2 C e l s i u s c l e a n : @rm C e l s i u s 2 K e l v i n K e l v i n 2 C e l s i u s Le # introduit un commentaire sur le reste de la ligne, le - devant une commande autorise make à continuer même si la commande échoue et, enfin @ devant une commande empêche make de nous l afficher chaque fois qu il l exécute.

Compilation d un document Pour imprimer un document en L A TEX, il faut le compiler puis convertir le résultat de la compilation en PostScript, langage de l imprimante : Compte Rendu. ps : Compte Rendu. d v i d v i p s o Compte Rendu. ps Compte Rendu. d v i rm Compte Rendu. d v i Compte Rendu. d v i : Compte Rendu. t e x l a t e x Compte Rendu. t e x.phony : p r i n t p r i n t : Compte Rendu. ps l p r P c o p i e u s e Compte Rendu. ps rm Compte Rendu. p s

Il y a un peu trop de duplication! Heureusement, il existe des variables automatiques comme $@ (la cible courante) et $< (la première dépendance) : Compte Rendu. ps : Compte Rendu. d v i d v i p s o $@ $< rm $< Compte Rendu. d v i : Compte Rendu. t e x l a t e x $<.PHONY : p r i n t p r i n t : Compte Rendu. ps l p r P c o p i e u s e $< rm $<

Pour être plus général on peut définir de nouvelles règles implicites (comme celle, par exemple, qui permet de construire un fichier.o à partir d un fichier.c). %. ps : %. d v i d v i p s o $@ $< rm $< %. d v i : %. t e x l a t e x $< p r i n t % : %. ps l p r P c o p i e u s e $< Attention : Ce Makefile ne contient aucune cible. On en indiquera donc une sur la ligne de commande ; par exemple : make Compte Rendu.ps.

Retour sur le premier exemple OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o e d i t : $ (OBJECTS) cc o e d i t $ (OBJECTS) main. o : d e f s. h kbd. o : d e f s. h command. h command. o : d e f s. h command. h d i s p l a y. o : d e f s. h f i l e s. o : d e f s. h command. h.phony : c l e a n c l e a n : rm f e d i t $ (OBJECTS) Des variables particulières servent de paramètres : le nom du

Retour sur le premier exemple OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o e d i t : $ (OBJECTS) cc o e d i t $ (OBJECTS) main. o : d e f s. h kbd. o : d e f s. h command. h command. o : d e f s. h command. h d i s p l a y. o : d e f s. h f i l e s. o : d e f s. h command. h.phony : c l e a n c l e a n : rm f e d i t $ (OBJECTS) Des variables particulières servent de paramètres : le nom du

OBJECTS = main. o kbd. o command. o d i s p l a y. o f i l e s. o CC = gcc CFLAGS = g s t d=c99 Wall e d i t : $ (OBJECTS) $ (CC) o e d i t $ (OBJECTS) main. o : d e f s. h kbd. o : d e f s. h command. h command. o : d e f s. h command. h d i s p l a y. o : d e f s. h f i l e s. o : d e f s. h command. h.phony : c l e a n c l e a n : rm f e d i t $ (OBJECTS)

Évolutivité Au cours de l évolution du développement, il sera nécessaire de tenir à jour 1. la variable OBJECTS 2. les dépendances des fichiers.h Utilisation de fonctions de make comme shell, wildcard, subst : $(wildcard *.c) Utilisation de l option -MM du compilateur : gcc -MM *.c >Makedeps

Évolutivité Au cours de l évolution du développement, il sera nécessaire de tenir à jour 1. la variable OBJECTS 2. les dépendances des fichiers.h Utilisation de fonctions de make comme shell, wildcard, subst : $(wildcard *.c) Utilisation de l option -MM du compilateur : gcc -MM *.c >Makedeps

Évolutivité Au cours de l évolution du développement, il sera nécessaire de tenir à jour 1. la variable OBJECTS 2. les dépendances des fichiers.h Utilisation de fonctions de make comme shell, wildcard, subst : $(wildcard *.c) Utilisation de l option -MM du compilateur : gcc -MM *.c >Makedeps

# F a i r e make depend avant make SOURCES = $ ( wildcard. c ) OBJECTS = $ (SOURCES :. c =.o ) CC = gcc CFLAGS = g s t d=c99 Wall e d i t : $ (OBJECTS) $ (CC) o e d i t $ (OBJECTS) i n c l ude Makedeps.PHONY : c l e a n depend c l e a n : rm f e d i t $ (OBJECTS) depend : $ (CC) MM $ (SOURCES) >Makedeps

# A j u s t e r l e s 2 v a r i a b l e s s u i v a n t e s # F a i r e make depend p u i s make # P a s s e r r o o t pour f a i r e make i n s t a l l TARGET = e d i t BINDIR = / u s r / l o c a l / b i n # Ce q u i s u i t ne d e v r a i t pas e t r e m o d i f i e SOURCES = $ ( wildcard. c ) OBJECTS = $ (SOURCES :. c =.o ) CC = gcc CFLAGS = g s t d=c99 Wall $ (TARGET) : $ (OBJECTS) $ (CC) o $ (TARGET) $ ( OBJECTS) i n c l ude Makedeps

# A j u s t e r l e s 2 v a r i a b l e s s u i v a n t e s # F a i r e make depend p u i s make # P a s s e r r o o t pour f a i r e make i n s t a l l TARGET = e d i t BINDIR = / u s r / l o c a l / b i n # Ce q u i s u i t ne d e v r a i t pas e t r e m o d i f i e SOURCES = $ ( wildcard. c ) OBJECTS = $ (SOURCES :. c =.o ) CC = gcc CFLAGS = g s t d=c99 Wall $ (TARGET) : $ (OBJECTS) $ (CC) o $ (TARGET) $ ( OBJECTS) i n c l ude Makedeps

... i n c l ude Makedeps.PHONY : c l e a n depend i n s t a l l c l e a n : rm f $ (TARGET) $ ( OBJECTS) Makedeps depend : $ (CC) MM $ (SOURCES) >Makedeps i n s t a l l : $ (TARGET) cp $ (TARGET) $ ( BINDIR )

Introduction Plan de la section Compilation Mise au point gdb valgrind Édition Documentation Gestion de versions

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Commandes d état général h[elp] com : i[nfo] info : sho[w] param : set param valeur : file prog : (idem gdb prog) core core : (idem gdb prog core) attach pid : (idem gdb prog pid) dir rep : répertoire des sources

Conditions d arrêt b[reak] [fich :] fct/lig [if cond] wa[tch] exp : arrêt sur changement de valeur : point d arrêt dans le code dis/en[able] [num] : (dés)activation d un point d arrêt (tous p. déf.) d[elete] exp : suppression définitive

Conditions d arrêt b[reak] [fich :] fct/lig [if cond] wa[tch] exp : arrêt sur changement de valeur : point d arrêt dans le code dis/en[able] [num] : (dés)activation d un point d arrêt (tous p. déf.) d[elete] exp : suppression définitive

Conditions d arrêt b[reak] [fich :] fct/lig [if cond] wa[tch] exp : arrêt sur changement de valeur : point d arrêt dans le code dis/en[able] [num] : (dés)activation d un point d arrêt (tous p. déf.) d[elete] exp : suppression définitive

Conditions d arrêt b[reak] [fich :] fct/lig [if cond] wa[tch] exp : arrêt sur changement de valeur : point d arrêt dans le code dis/en[able] [num] : (dés)activation d un point d arrêt (tous p. déf.) d[elete] exp : suppression définitive

Exécution r[un] [args] [redir] : n[ext] [nbre] : on exécute totalement les fonctions s[tep] [nbre] : on rentre dans les fonctions c[ontinue] : on continue jusqu à une condition d arrêt fin[ish] : on termine la fonction courante

Exécution r[un] [args] [redir] : n[ext] [nbre] : on exécute totalement les fonctions s[tep] [nbre] : on rentre dans les fonctions c[ontinue] : on continue jusqu à une condition d arrêt fin[ish] : on termine la fonction courante

Exécution r[un] [args] [redir] : n[ext] [nbre] : on exécute totalement les fonctions s[tep] [nbre] : on rentre dans les fonctions c[ontinue] : on continue jusqu à une condition d arrêt fin[ish] : on termine la fonction courante

Exécution r[un] [args] [redir] : n[ext] [nbre] : on exécute totalement les fonctions s[tep] [nbre] : on rentre dans les fonctions c[ontinue] : on continue jusqu à une condition d arrêt fin[ish] : on termine la fonction courante

Exécution r[un] [args] [redir] : n[ext] [nbre] : on exécute totalement les fonctions s[tep] [nbre] : on rentre dans les fonctions c[ontinue] : on continue jusqu à une condition d arrêt fin[ish] : on termine la fonction courante

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Affichages l[ist] [fich :] [fct/lig] : p. def. autour du point d arrêt p[rint] [/format] expr : cal[l] expr : idem print mais sans affichage disp[lay] [/format] expr : affichage automatique à chaque arrêt b[ack]t[race] : liste les cadres de chaque fonction en cours dans la pile d exécution f[rame] num : change de cadre up/do[wn] [nbre] : change de cadre

Fonctions

Introduction Plan de la section Compilation Mise au point Édition Emacs Emacs-Lisp Elisp (suite) Documentation Gestion de versions

Éléments d Emacs Fichier, tampon ( buffer ), fenêtre, cadre ( frame ) Ligne, colonne, point, marque, région Clé, touche, commande, table de liaison ( binding ) Modes (majeurs et mineurs) Fonctions (interactives ou pas), variables (locales ou globales)

Éléments d Emacs Fichier, tampon ( buffer ), fenêtre, cadre ( frame ) Ligne, colonne, point, marque, région Clé, touche, commande, table de liaison ( binding ) Modes (majeurs et mineurs) Fonctions (interactives ou pas), variables (locales ou globales)

Éléments d Emacs Fichier, tampon ( buffer ), fenêtre, cadre ( frame ) Ligne, colonne, point, marque, région Clé, touche, commande, table de liaison ( binding ) Modes (majeurs et mineurs) Fonctions (interactives ou pas), variables (locales ou globales)

Éléments d Emacs Fichier, tampon ( buffer ), fenêtre, cadre ( frame ) Ligne, colonne, point, marque, région Clé, touche, commande, table de liaison ( binding ) Modes (majeurs et mineurs) Fonctions (interactives ou pas), variables (locales ou globales)

Éléments d Emacs Fichier, tampon ( buffer ), fenêtre, cadre ( frame ) Ligne, colonne, point, marque, région Clé, touche, commande, table de liaison ( binding ) Modes (majeurs et mineurs) Fonctions (interactives ou pas), variables (locales ou globales)

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

Personnalisation d Emacs Emacs n est qu un interprète Lisp intégrant des fonctions spécialisées pour manipuler et afficher du texte. Ceci permet une très grande flexibilité. Emacs-lisp ~ /.emacs autoload auto-mode-alist add-hook...

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

LISP Un interprète LISP (LISt Processor) évalue uniquement des expressions. Les expressions sont écrites sous forme préfixe : l opérateur est placé devant ses opérandes. Les parenthèses entourent l opérateur et ses opérandes. L espace est l unique séparateur. x + y (+ x y) max(x, y) (max x y) x = y (setq x y) x = y > 0? z 1 : z 2 (setq x (if (> y 0) z1 z2))

i f ( x > 0 ) { y = 2 y ; } e l s e { y = 1 ; p r i n t f ( T i l t \n ) ; } ( i f (> x 0) ( s e t q y ( 2 y ) ) ( s e t q y 1) ( message T i l t ) )

while ( n > 0 ) { x = x + f ( n ) ; n ; } ( w h i l e (> n 0) ( s e t q x (+ x ( f n ) ) ) ( s e t q n ( n 1 ) ) )

{ } i n t s = 0 ; s = f ( s, x1 ) ; s = f ( s, x2 ) ;... ( l e t ( ( s 0) ) ( s e t q s ( f s x1 ) ) ( s e t q s ( f s x2 ) )... )

i n t f a c t ( i n t n ) { return n == 0? 1 : n f a c t ( n 1 ) ; } ( defun f a c t ( n ) C a l c u l e f a c t o r i e l l e N ( i f (= n 0) 1 ( n ( f a c t ( n 1 ) ) ) ) )

Spécificités d emacs-lisp Emacs contient un grand nombre de fonctions prédéfinies comme if, setq, *, defun,... ; mais aussi des fonctions comme forward-char, apropos, find-file,... Les fonctions de ce deuxième groupe ont la particularité d être interactives : elles définissent des commandes qui peuvent être liées à des clés. Ainsi la clé C-f est en général liée à la commande forward-char, qui provoque l évaluation de l expression LISP (forward-char) qui avance le curseur d une position à droite dans le buffer courant. Par contre if ou setq ne sont pas interactives, ce ne sont pas des commandes.

Spécificités d emacs-lisp Emacs contient un grand nombre de fonctions prédéfinies comme if, setq, *, defun,... ; mais aussi des fonctions comme forward-char, apropos, find-file,... Les fonctions de ce deuxième groupe ont la particularité d être interactives : elles définissent des commandes qui peuvent être liées à des clés. Ainsi la clé C-f est en général liée à la commande forward-char, qui provoque l évaluation de l expression LISP (forward-char) qui avance le curseur d une position à droite dans le buffer courant. Par contre if ou setq ne sont pas interactives, ce ne sont pas des commandes.

Spécificités d emacs-lisp Emacs contient un grand nombre de fonctions prédéfinies comme if, setq, *, defun,... ; mais aussi des fonctions comme forward-char, apropos, find-file,... Les fonctions de ce deuxième groupe ont la particularité d être interactives : elles définissent des commandes qui peuvent être liées à des clés. Ainsi la clé C-f est en général liée à la commande forward-char, qui provoque l évaluation de l expression LISP (forward-char) qui avance le curseur d une position à droite dans le buffer courant. Par contre if ou setq ne sont pas interactives, ce ne sont pas des commandes.

Spécificités d emacs-lisp Emacs contient un grand nombre de fonctions prédéfinies comme if, setq, *, defun,... ; mais aussi des fonctions comme forward-char, apropos, find-file,... Les fonctions de ce deuxième groupe ont la particularité d être interactives : elles définissent des commandes qui peuvent être liées à des clés. Ainsi la clé C-f est en général liée à la commande forward-char, qui provoque l évaluation de l expression LISP (forward-char) qui avance le curseur d une position à droite dans le buffer courant. Par contre if ou setq ne sont pas interactives, ce ne sont pas des commandes.

Spécificités d emacs-lisp Emacs contient un grand nombre de fonctions prédéfinies comme if, setq, *, defun,... ; mais aussi des fonctions comme forward-char, apropos, find-file,... Les fonctions de ce deuxième groupe ont la particularité d être interactives : elles définissent des commandes qui peuvent être liées à des clés. Ainsi la clé C-f est en général liée à la commande forward-char, qui provoque l évaluation de l expression LISP (forward-char) qui avance le curseur d une position à droite dans le buffer courant. Par contre if ou setq ne sont pas interactives, ce ne sont pas des commandes.

Spécificités d emacs-lisp (suite) Il est possible de transmettre un paramètre à une fonction déclenchée par une commande. Par exemple la commande find-file, en général liée à la clé C-x C-f, provoque l évaluation de (find-file "fichier") où fichier est une chaîne de caractères acquise dans le mini-buffer. De même, si on tape C-u 1 2 C-f cela provoque l évaluation de (forward-char 12) qui avance le curseur de 12 positions à droite dans le buffer courant.

Spécificités d emacs-lisp (suite) Il est possible de transmettre un paramètre à une fonction déclenchée par une commande. Par exemple la commande find-file, en général liée à la clé C-x C-f, provoque l évaluation de (find-file "fichier") où fichier est une chaîne de caractères acquise dans le mini-buffer. De même, si on tape C-u 1 2 C-f cela provoque l évaluation de (forward-char 12) qui avance le curseur de 12 positions à droite dans le buffer courant.

Spécificités d emacs-lisp (suite) Il est possible de transmettre un paramètre à une fonction déclenchée par une commande. Par exemple la commande find-file, en général liée à la clé C-x C-f, provoque l évaluation de (find-file "fichier") où fichier est une chaîne de caractères acquise dans le mini-buffer. De même, si on tape C-u 1 2 C-f cela provoque l évaluation de (forward-char 12) qui avance le curseur de 12 positions à droite dans le buffer courant.

Évaluation par emacs-lisp Pour accéder à l interprète d Emacs deux commandes sont particulièrement utiles : 1. execute-extended-command : cette commande, en général liée à la clé M-x, provoque l exécution d une commande dont le nom est acquis dans le mini-buffer. 2. eval-expression : cette commande, en général liée à la clé M-:, permet d obtenir l évaluation d une expression LISP acquise dans le mini-buffer. Le résultat de l évaluation est affiché aussi dans le mini-buffer.

Évaluation par emacs-lisp Pour accéder à l interprète d Emacs deux commandes sont particulièrement utiles : 1. execute-extended-command : cette commande, en général liée à la clé M-x, provoque l exécution d une commande dont le nom est acquis dans le mini-buffer. 2. eval-expression : cette commande, en général liée à la clé M-:, permet d obtenir l évaluation d une expression LISP acquise dans le mini-buffer. Le résultat de l évaluation est affiché aussi dans le mini-buffer.

Évaluation par emacs-lisp Pour accéder à l interprète d Emacs deux commandes sont particulièrement utiles : 1. execute-extended-command : cette commande, en général liée à la clé M-x, provoque l exécution d une commande dont le nom est acquis dans le mini-buffer. 2. eval-expression : cette commande, en général liée à la clé M-:, permet d obtenir l évaluation d une expression LISP acquise dans le mini-buffer. Le résultat de l évaluation est affiché aussi dans le mini-buffer.

Il y a donc 3 manières d obtenir que le curseur se déplace d une position à droite dans le buffer courant : 1. C-f 2. M-x forward-char RET 3. M-: (forward-char) RET Pour déplacer le curseur de 12 positions à droite on a les 3 solutions suivantes : 1. C-u 1 2 C-f 2. C-u 1 2 M-x forward-char RET 3. M-: (forward-char 12) RET

Il y a donc 3 manières d obtenir que le curseur se déplace d une position à droite dans le buffer courant : 1. C-f 2. M-x forward-char RET 3. M-: (forward-char) RET Pour déplacer le curseur de 12 positions à droite on a les 3 solutions suivantes : 1. C-u 1 2 C-f 2. C-u 1 2 M-x forward-char RET 3. M-: (forward-char 12) RET

Il y a aussi 3 manières de charger le fichier toto.c dans un buffer : 1. C-x C-f toto.c RET 2. M-x find-file RET toto.c RET 3. M-: (find-file "toto.c") RET

D autres commandes utiles sont : eval-last-sexp : en général liée à la clé C-x C-e, provoque l évaluation de l expression LISP immédiatement avant le curseur dans le buffer courant. Le résultat est affiché dans le mini-buffer. eval-region : provoque l interprétation de toute la région courante dans le buffer courant. load-file : après l acquisition dans le mini-buffer d un nom de fichier, tout le fichier est interprété.

D autres commandes utiles sont : eval-last-sexp : en général liée à la clé C-x C-e, provoque l évaluation de l expression LISP immédiatement avant le curseur dans le buffer courant. Le résultat est affiché dans le mini-buffer. eval-region : provoque l interprétation de toute la région courante dans le buffer courant. load-file : après l acquisition dans le mini-buffer d un nom de fichier, tout le fichier est interprété.

D autres commandes utiles sont : eval-last-sexp : en général liée à la clé C-x C-e, provoque l évaluation de l expression LISP immédiatement avant le curseur dans le buffer courant. Le résultat est affiché dans le mini-buffer. eval-region : provoque l interprétation de toute la région courante dans le buffer courant. load-file : après l acquisition dans le mini-buffer d un nom de fichier, tout le fichier est interprété.

D autres commandes utiles sont : eval-last-sexp : en général liée à la clé C-x C-e, provoque l évaluation de l expression LISP immédiatement avant le curseur dans le buffer courant. Le résultat est affiché dans le mini-buffer. eval-region : provoque l interprétation de toute la région courante dans le buffer courant. load-file : après l acquisition dans le mini-buffer d un nom de fichier, tout le fichier est interprété.

( defun numerote ( ) Numerote t o u t e l e s l i g n e s du b u f f e r ( i n t e r a c t i v e ) ( b e g i n n i n g o f b u f f e r ) ( l e t ( ( n 0) ) ( w h i l e (< ( p o i n t ) ( point max ) ) ( b e g i n n i n g o f l i n e ) ( s e t q n (+ n 1 ) ) ( i n s e r t s t r i n g n : ) ( n e x t l i n e 1) ) ) )

( defun denumerote ( ) D e f a i t l e numerotage ( i n t e r a c t i v e ) ( b e g i n n i n g o f b u f f e r ) ( w h i l e (< ( p o i n t ) ( point max ) ) ( b e g i n n i n g o f l i n e ) ( r e p l a c e r e g e x p [0 9] : ) ( n e x t l i n e 1) ) )

( defun genere numeros ( n ) I n s e r e l a s u i t e n... 3 2 1 0 a l a p o s i t i o n du c u r s e u r ( par d e f a u t n vaut 10) ( i n t e r a c t i v e p ) ( i f (= n 1) ( s e t q n 1 0)) ( w h i l e (>= n 0) ( i n s e r t ( format %d n ) ) ( s e t q n ( n 1 ) ) ) ) ( global set key \M n genere numeros )

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Types de données 1. les nombres entiers : 12, -35 2. et les chaînes de caractères : "un exemple" 3. les symboles : numerote, n, while, * 4. les listes : (1 2 3), ("bonjour" ("a" vous) 2), (* n 2), (quote (* n 2)), () Dans les tests, la liste vide () est interprétée comme faux. Toute autre valeur de quelque type que ce soit est interprétée comme vrai. Emacs-Lisp manipule d autres types de données comme les nombres flottants et les vecteurs, mais aussi des types de données plus spécialisés comme les buffers, les marques, les tables de liaison, etc

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Évaluations des expressions L écriture expression est une forme abrégée de (quote expression) qui empêche l évaluation de l expression. A contrario, (eval expression) force l évaluation du résultat de l expression. Exemple : (progn (setq a 3) (setq x a) (setq y a) (setq z (+ a 1)) (setq w (+ a 1))) = x vaut 3, y vaut a, z vaut 4 et w vaut (+ a 1) ; (eval x) vaut 3, (eval y) vaut 3, (eval z) vaut 4 et (eval w) vaut 4. Le symbole nil a une valeur prédéfinie : la liste vide (). Le symbole t a une valeur prédéfinie : le symbole t ; cette valeur est utilisée comme vrai. Le caractère ; introduit un commentaire.

Fonctions essentielles (if cond expr 1 expr 2...expr n ) : évalue cond puis, si cond a une valeur différente de nil alors évalue expr 1, sinon évalue expr 2,..., expr n. La valeur du if est celle de expr 1 ou celle de expr n, suivant le cas. (while cond expr 1...expr n ) : évalue cond et tant que la valeur de cond diffère de nil, alors expr 1,..., expr n et cond sont réévaluées. La valeur finale du while est toujours nil.

Fonctions essentielles (if cond expr 1 expr 2...expr n ) : évalue cond puis, si cond a une valeur différente de nil alors évalue expr 1, sinon évalue expr 2,..., expr n. La valeur du if est celle de expr 1 ou celle de expr n, suivant le cas. (while cond expr 1...expr n ) : évalue cond et tant que la valeur de cond diffère de nil, alors expr 1,..., expr n et cond sont réévaluées. La valeur finale du while est toujours nil.

Fonctions essentielles (if cond expr 1 expr 2...expr n ) : évalue cond puis, si cond a une valeur différente de nil alors évalue expr 1, sinon évalue expr 2,..., expr n. La valeur du if est celle de expr 1 ou celle de expr n, suivant le cas. (while cond expr 1...expr n ) : évalue cond et tant que la valeur de cond diffère de nil, alors expr 1,..., expr n et cond sont réévaluées. La valeur finale du while est toujours nil.

Fonctions essentielles (suite) (let (symb 1...symb p ) expr 1...expr n ) : évalue expr 1,..., expr n en y considérant symb 1,..., symb p comme des variables locales. Chaque symbole de la liste en 1 er paramètre de let, peut recevoir une valeur initiale en mettant (symb expr) en lieu et place de symb tout court. La valeur du let est celle de expr n. (defun symb (symb 1...symb p ) [ string ] expr 1...expr n ) : affecte à symb la fonction ayant symb 1,..., symb p comme paramètres formels et expr 1,..., expr n comme corps. La chaîne de caractères string documente la fonction. La valeur retournée par defun est le symbole symb. La valeur retournée par la fonction sera celle de expr n.

Fonctions essentielles (suite) (let (symb 1...symb p ) expr 1...expr n ) : évalue expr 1,..., expr n en y considérant symb 1,..., symb p comme des variables locales. Chaque symbole de la liste en 1 er paramètre de let, peut recevoir une valeur initiale en mettant (symb expr) en lieu et place de symb tout court. La valeur du let est celle de expr n. (defun symb (symb 1...symb p ) [ string ] expr 1...expr n ) : affecte à symb la fonction ayant symb 1,..., symb p comme paramètres formels et expr 1,..., expr n comme corps. La chaîne de caractères string documente la fonction. La valeur retournée par defun est le symbole symb. La valeur retournée par la fonction sera celle de expr n.

Introduction Plan de la section Compilation Mise au point Édition Documentation Introduction L A TEX Gestion de versions

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

Introduction L A TEX est un langage pour construire des documents textuels. Le compilateur a pour fonction essentielle de permettre le calcul de la présentation d un document à partir de sa structure. Il intègre pour le faire une très grande expertise des règles typographiques. Le langage doit donc permettre aussi bien d exprimer la structure d un document que d exprimer la présentation d un document. La construction d un document en L A TEX comprend deux parties : 1. choisir sa classe : la manière de calculer sa présentation 2. décrire sa structure

B.I.D.O.N Rue des Mots 80886 Sassonne-le-Creux Tél. 987.64.20 Fax : 987.75.31 Sassonne-le-Creux, le 4 février 2010 Professeur Donald E. Knuth Stanford University Stanford, CA 94305 États-Unis Objet : Concours Regeot Cher Professeur Knuth, Nous vous informons que votre participation au grand jeu-concours Magazine Regeot - Hiver 2008 a bien été prise en compte. Rendez-vous sur www.regeot.fr à partir du 14 mai pour connaître la liste des gagnants! Ce message a été adressé à l aide des informations du fichier client de la société Automobiles Regeot. Vous bénéficiez d un droit d accès, de modification, de rectification et/ou de suppression des informations vous concernant. Pour exercer ce droit, il vous suffit de l exprimer par écrit auprès de Automobiles Regeot. Veuillez agréez, cher Professeur, à l expression de mes sentiments les meilleurs. C.c. Mme Jeanne Poto Pierre Martin

\ documentclass [ 1 2 pt, a 4 ] { l e t t r e } \usepackage [ f r e n c h ] { b a b e l } \usepackage [ u t f 8 ] { i n p u t e n c } \ begin { document } \name{ P i e r r e Martin } \ begin { l e t t e r }{ P r o f e s s e u r... Etats Unis } \ conc { Concours Regeot } \ opening { Cher P r o f e s s e u r Knuth, } Nous vous i n f o r m o n s que... des gagnants! Ce message a... Regeot. \ c l o s i n g { V e u i l l e z... m e i l l e u r s. } \ cc {Mme Jeanne Poto } \end{ l e t t e r } \end{ document }

\ documentclass [ 1 2 pt ] { a r t i c l e } \usepackage [ f r e n c h ] { b a b e l } \ t i t l e {Un exemple b a s i q u e } \ author { Bernard V a u q u e l i n } \ begin { document } \ m a k e t i t l e \ t a b l e o f c o n t e n t s \ s e c t i o n {La une } Cet a r t i c l e e s t t r o p... s i m p l e. Cet a r t i c l e e s t t r o p... s i m p l e. \ s e c t i o n {La deux } La s u i t e p l u s t a r d. \end{ document }

Un exemple basique Bernard Vauquelin 4 février 2010 Table des matières 1 La une 1 2 La deux 1 1 La une Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. Cet article est trop simple. 2 La deux La suite plus tard. 1

\ documentclass { beamer } \usepackage [ f r e n c h ] { b a b e l } \ usetheme { AnnArbor } \ begin { document } \ begin { frame } \ f r a m e t i t l e { T r o i s cas } \ begin { enumerate } \item un bon \item l e mauvais \item un a u t r e \end{ enumerate } \end{ frame } \ begin { frame } Rien \end{ frame } \end{ document }

Trois cas 1 un bon 2 le mauvais 3 un autre

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Historique Donald E. Knuth écrit la première version de TEX entre 1977 et 1982 pour pouvoir éditer son encyclopédie The Art of Computer Programming de la meilleure manière qui soit. Leslie Lamport propose au début des années 80 un ensemble de macros TEX qui définit L A TEX. D.E. Knuth rémunére les bugs découverts dans ses compilateurs et dans ses livres. Il a fixé le prix à 1 centime de dollar pour le premier bug, puis double le prix à chaque nouveau bug découvert! (cf. Alexandre le Grand et Aristote). D.E. Knuth a été fait Docteur Honoris Causa de l Université Bordeaux 1 le 30 octobre 2007.

Avantages Mise en page professionnelle sans souci, structures complexes facilitées, maintenance aisée, format standard et durable.

Avantages Mise en page professionnelle sans souci, structures complexes facilitées, maintenance aisée, format standard et durable.

Avantages Mise en page professionnelle sans souci, structures complexes facilitées, maintenance aisée, format standard et durable.

Avantages Mise en page professionnelle sans souci, structures complexes facilitées, maintenance aisée, format standard et durable.

Avantages Mise en page professionnelle sans souci, structures complexes facilitées, maintenance aisée, format standard et durable.

Forme générale \ documentclass[< o p t i o n s >]{< c l a s s e >} \usepackage[< o p t i o n s >{<paquetage >}... \ begin { document }...... % <commentaires>... \end{ document } Classes : book, article, letter, présentations, affiches, partitions musicales,... Paquetages : babel, inputenc, a4wide, multicol, ams,...

Forme générale \ documentclass[< o p t i o n s >]{< c l a s s e >} \usepackage[< o p t i o n s >{<paquetage >}... \ begin { document }...... % <commentaires>... \end{ document } Classes : book, article, letter, présentations, affiches, partitions musicales,... Paquetages : babel, inputenc, a4wide, multicol, ams,...

Forme générale \ documentclass[< o p t i o n s >]{< c l a s s e >} \usepackage[< o p t i o n s >{<paquetage >}... \ begin { document }...... % <commentaires>... \end{ document } Classes : book, article, letter, présentations, affiches, partitions musicales,... Paquetages : babel, inputenc, a4wide, multicol, ams,...

Modularité \ input{< f i c h i e r >} \ i n c l u d e o n l y{< l i s t e de f i c h i e r s >} \ i n c l ude{< f i c h i e r >} Pour \include : conditionnel, pas de suffixe dans les noms de fichiers, uniquement dans le corps du document et nécessairement à une frontière de page. Le paquetage graphicx définit aussi : \ i n c l u d e g r a p h i c s [< o p t i o n s >]{< f i c h i e r >}

Modularité \ input{< f i c h i e r >} \ i n c l u d e o n l y{< l i s t e de f i c h i e r s >} \ i n c l ude{< f i c h i e r >} Pour \include : conditionnel, pas de suffixe dans les noms de fichiers, uniquement dans le corps du document et nécessairement à une frontière de page. Le paquetage graphicx définit aussi : \ i n c l u d e g r a p h i c s [< o p t i o n s >]{< f i c h i e r >}

Modularité \ input{< f i c h i e r >} \ i n c l u d e o n l y{< l i s t e de f i c h i e r s >} \ i n c l ude{< f i c h i e r >} Pour \include : conditionnel, pas de suffixe dans les noms de fichiers, uniquement dans le corps du document et nécessairement à une frontière de page. Le paquetage graphicx définit aussi : \ i n c l u d e g r a p h i c s [< o p t i o n s >]{< f i c h i e r >}

Chapitrage Hiérarchie : \ c h a p t e r ( T i t r e de c h a p i t r e } \ s e c t i o n { T i t r e de s e c t i o n } \ paragraph { T i t r e de p a r a g r a p h e } Peuvent exister : \part, \chapter, \section, \subsection, \subsubsection, \paragraph, \subparagraph. Variations : \ s e c t i o n { Pas dans l a TdM} \ s e c t i o n [ T i t r e c o u r t ] { T i t r e... l o n g }

Chapitrage Hiérarchie : \ c h a p t e r ( T i t r e de c h a p i t r e } \ s e c t i o n { T i t r e de s e c t i o n } \ paragraph { T i t r e de p a r a g r a p h e } Peuvent exister : \part, \chapter, \section, \subsection, \subsubsection, \paragraph, \subparagraph. Variations : \ s e c t i o n { Pas dans l a TdM} \ s e c t i o n [ T i t r e c o u r t ] { T i t r e... l o n g }

Chapitrage Hiérarchie : \ c h a p t e r ( T i t r e de c h a p i t r e } \ s e c t i o n { T i t r e de s e c t i o n } \ paragraph { T i t r e de p a r a g r a p h e } Peuvent exister : \part, \chapter, \section, \subsection, \subsubsection, \paragraph, \subparagraph. Variations : \ s e c t i o n { Pas dans l a TdM} \ s e c t i o n [ T i t r e c o u r t ] { T i t r e... l o n g }

Chapitrage Hiérarchie : \ c h a p t e r ( T i t r e de c h a p i t r e } \ s e c t i o n { T i t r e de s e c t i o n } \ paragraph { T i t r e de p a r a g r a p h e } Peuvent exister : \part, \chapter, \section, \subsection, \subsubsection, \paragraph, \subparagraph. Variations : \ s e c t i o n { Pas dans l a TdM} \ s e c t i o n [ T i t r e c o u r t ] { T i t r e... l o n g }

Mathématiques La v a l e u r de $x i La valeur de x i 2 n+1 yi 2 est 2ˆ{ n+1} y i ˆ2$ e s t comme comme dans dans $$ z= p \sum { k=1}ˆp \ f r a c {1}{ 1 z = \ alpha+kˆ{ x i }} 1$$ α + k x 1 i k=1 a p proximativement! approximativement!

Environnements \ begin{<environnement >}[< o p t i o n s > ]...... \end{<environnement >} Le t e x t e e s t l e s u i v a n t : \ begin { v e r s e } Un exemple i d i o t de t e x t e s t u p i d e. \end{ v e r s e } C e s t f i n i. Le texte est le suivant : Un exemple idiot de texte stupide. C est fini.

Listes \ begin { enumerate } \item N a r c i s s e \item [ 1 b i s ] T u l i p e \item Rose \ l a b e l { t o t o } \end{ enumerate } \ begin { d e s c r i p t i o n } 1. Narcisse 1bis Tulipe 2. Rose \item [ rouge ] une c o u l e u r rouge une couleur \item [ b l e u c i e l ] 1 a u t r e \ begin { i t e m i z e } bleu ciel 1 autre \item f r o i d froid \item lumineux lumineux \end{ i t e m i z e } vert encore une \item [ v e r t ] e n c o r e une \end{ d e s c r i p t i o n }

Tableaux Exemple de l a p r o c h a i n e l i g n e 1 2 : \ begin { t a b u l a r } { l cc } \ h l i n e rouge & 17 & 1 \\ Exemple de la prochaine ligne \ h l i n e rouge 17-1 b l e u c i e l & 3 & 12 \\ 12 : bleu ciel 3 12 etc \ h l i n e vert nul 9 v e r t & \ i t n u l & 9 \\ \ h l i n e \end{ t a b u l a r } e t c

Autres environnements Divers : center, flushleft, flushright, quote, quotation, theorem, verbatim, list, titlepage, thebibliography, minipage, tabbing, picture. Mathématiques : math, displaymath, equation, eqnarray, array. Flottants : figure, table : peuvent avoir une légende (\caption{...}), se placent librement dans la page, ont leurs propres tables de références.

Autres environnements Divers : center, flushleft, flushright, quote, quotation, theorem, verbatim, list, titlepage, thebibliography, minipage, tabbing, picture. Mathématiques : math, displaymath, equation, eqnarray, array. Flottants : figure, table : peuvent avoir une légende (\caption{...}), se placent librement dans la page, ont leurs propres tables de références.

Autres environnements Divers : center, flushleft, flushright, quote, quotation, theorem, verbatim, list, titlepage, thebibliography, minipage, tabbing, picture. Mathématiques : math, displaymath, equation, eqnarray, array. Flottants : figure, table : peuvent avoir une légende (\caption{...}), se placent librement dans la page, ont leurs propres tables de références.

Références A l l e z v o i r \ footnote { s i vous l e v o u l e z } l a f l e u r dans l item \ r e f { t o t o } en page \ pageref { t o t o }. Bla b l a \& b l a b l a \& \ l d o t s Allez voir a la fleur dans l item 2 en page 184. Bla bla & bla bla &... a si vous le voulez

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Mise en forme L \ ˆ age de l \ oe{} u v r e de l \ t e x t b f { I l i a d e } L âge de l œuvre de l Iliade e s t \\ t r \ es est c e r\ t a i \ ne\ ment {\ l a r g e très certainement particulièrement difficile à p a r t i c u l i \ erement \emph{ d i f f i c i l e } deviner. \ a } d e v i n e r. \textit{...},... ; \it, \rm,... ; \tiny, \normalsize,... ; \sloppy et \fussy. \linebreak[<0 à 4>] ; \pagebreak[<0 à 4>], \nopagebreak[<0 à 4>], \newpage, \clearpage.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Programmation \newcommand{\ u b x i }{\ b f U n i v e r s i t \ e Bordeaux 1} \newcommand{\ a l a } [ 1 ] {$ˆ{\mbox{% Ceci est le 1 er essai de \ s c r i p t s i z e #1}}$} M e Pierre à l Université C e c i e s t l e 1\ a l a { e r } Bordeaux 1. e s s a i de M\ a l a { e } P i e r r e \ a l \ u b x i. Les \newcommand vont généralement avant \begin{document}. On peut aussi définir des environnements ; définir et calculer des compteurs, des longueurs, des nombres ; faire des tests. Toutes choses particulièrement utiles pour écrire des paquetages et définir de nouvelles classes de documents.

Introduction Plan de la section Compilation Mise au point Édition Documentation Gestion de versions Présentation Compléments

Développement collaboratif et gestion de versions Les outils existant cumulent le plus souvent les deux fonctions : 1. travail à plusieurs et à distance sur un même projet 2. gestion des différentes versions d un même projet La méthode traditionnelle utilise la modèle client-serveur, où sont regroupées sur un seul serveur toutes les informations du projet. Si ces informations sont réparties sur plusieurs sites, on parle de modèle distribué.

Le modèle client-seveur Les informations partagées sont stockées dans un dépôt ( repository ) sur un serveur central.

Le problème

Les solutions 1. verrouiller pendant le travail ( lock-modify-unlock ) 2. travailler sur une copie ( copy-modify-merge )

Les solutions 1. verrouiller pendant le travail ( lock-modify-unlock ) 2. travailler sur une copie ( copy-modify-merge )

Verrou

Les solutions 1. verrouiller pendant le travail ( lock-modify-unlock ) 2. travailler sur une copie ( copy-modify-merge )

Copie (1/2)

Copie (2/2)

Les opérations de base de Subversion Ces opérations s appliquent à un ou plusieurs fichiers, le plus souvent on les applique à un répertoire entier. 1. Read : 1.1 la première fois : checkout (ou co) = création d une copie de travail à partir du contenu du dépôt 1.2 les fois suivantes : update (ou up) = mise à jour d une copie de travail existante à partir du contenu du dépôt 2. Write : commit (ou ci) = enregistrement dans le dépôt des dernières modifications effectuées dans une copie de travail (seule opération susceptible d être rejetée par Subversion)

Les opérations de base de Subversion Ces opérations s appliquent à un ou plusieurs fichiers, le plus souvent on les applique à un répertoire entier. 1. Read : 1.1 la première fois : checkout (ou co) = création d une copie de travail à partir du contenu du dépôt 1.2 les fois suivantes : update (ou up) = mise à jour d une copie de travail existante à partir du contenu du dépôt 2. Write : commit (ou ci) = enregistrement dans le dépôt des dernières modifications effectuées dans une copie de travail (seule opération susceptible d être rejetée par Subversion)

Les opérations de base de Subversion Ces opérations s appliquent à un ou plusieurs fichiers, le plus souvent on les applique à un répertoire entier. 1. Read : 1.1 la première fois : checkout (ou co) = création d une copie de travail à partir du contenu du dépôt 1.2 les fois suivantes : update (ou up) = mise à jour d une copie de travail existante à partir du contenu du dépôt 2. Write : commit (ou ci) = enregistrement dans le dépôt des dernières modifications effectuées dans une copie de travail (seule opération susceptible d être rejetée par Subversion)

Les opérations de base de Subversion Ces opérations s appliquent à un ou plusieurs fichiers, le plus souvent on les applique à un répertoire entier. 1. Read : 1.1 la première fois : checkout (ou co) = création d une copie de travail à partir du contenu du dépôt 1.2 les fois suivantes : update (ou up) = mise à jour d une copie de travail existante à partir du contenu du dépôt 2. Write : commit (ou ci) = enregistrement dans le dépôt des dernières modifications effectuées dans une copie de travail (seule opération susceptible d être rejetée par Subversion)

Les opérations de base de Subversion Ces opérations s appliquent à un ou plusieurs fichiers, le plus souvent on les applique à un répertoire entier. 1. Read : 1.1 la première fois : checkout (ou co) = création d une copie de travail à partir du contenu du dépôt 1.2 les fois suivantes : update (ou up) = mise à jour d une copie de travail existante à partir du contenu du dépôt 2. Write : commit (ou ci) = enregistrement dans le dépôt des dernières modifications effectuées dans une copie de travail (seule opération susceptible d être rejetée par Subversion)

Opérations de base dépôt checkout update commit commit update checkout copie de travail copie de travail

Opérations de base (suite) original import dépôt export checkout update commit commit update checkout copie de travail copie de travail

Syntaxe simplifiée des commandes Une ressource (fichier ou répertoire) d un dépôt est toujours désignée par une URL (http ://..., file ://... ). Une ressource locale est, elle, désignée par un chemin. svn [options] opération [source] [destination] [options] Exemples : svn checkout http://svn. labri. fr /toto/trunk. svn update./doc svn commit. m Correction du bug 343. Chaque opération qui modifie le contenu du dépôt doit être accompagnée d un commentaire justificatif. En l absence de l option -m, svn ouvre un éditeur pour acquérir le commentaire.

Syntaxe simplifiée des commandes Une ressource (fichier ou répertoire) d un dépôt est toujours désignée par une URL (http ://..., file ://... ). Une ressource locale est, elle, désignée par un chemin. svn [options] opération [source] [destination] [options] Exemples : svn checkout http://svn. labri. fr /toto/trunk. svn update./doc svn commit. m Correction du bug 343. Chaque opération qui modifie le contenu du dépôt doit être accompagnée d un commentaire justificatif. En l absence de l option -m, svn ouvre un éditeur pour acquérir le commentaire.

Syntaxe simplifiée des commandes Une ressource (fichier ou répertoire) d un dépôt est toujours désignée par une URL (http ://..., file ://... ). Une ressource locale est, elle, désignée par un chemin. svn [options] opération [source] [destination] [options] Exemples : svn checkout http://svn. labri. fr /toto/trunk. svn update./doc svn commit. m Correction du bug 343. Chaque opération qui modifie le contenu du dépôt doit être accompagnée d un commentaire justificatif. En l absence de l option -m, svn ouvre un éditeur pour acquérir le commentaire.

Gestion des versions Svn conserve dans le dépôt toutes les versions successives de chaque fichier. Pour cela svn entretient un entier, le numéro de dernière révision 1, qui est initialisé à zéro à la création du dépôt, et incrémenté à chaque opération qui modifie le contenu du dépôt. Chaque version d un même fichier est repérée par le numéro de révision de l opération qui l a placée en dépôt. 1 noté HEAD

Gestion des versions Svn conserve dans le dépôt toutes les versions successives de chaque fichier. Pour cela svn entretient un entier, le numéro de dernière révision 1, qui est initialisé à zéro à la création du dépôt, et incrémenté à chaque opération qui modifie le contenu du dépôt. Chaque version d un même fichier est repérée par le numéro de révision de l opération qui l a placée en dépôt. 1 noté HEAD

Gestion des versions Svn conserve dans le dépôt toutes les versions successives de chaque fichier. Pour cela svn entretient un entier, le numéro de dernière révision 1, qui est initialisé à zéro à la création du dépôt, et incrémenté à chaque opération qui modifie le contenu du dépôt. Chaque version d un même fichier est repérée par le numéro de révision de l opération qui l a placée en dépôt. 1 noté HEAD

États d un fichier de travail Dans la copie de travail un fichier peut être dans un des 4 cas suivants. 1. localement pas modifié et inchangé dans le dépôt : non concerné par commit ni par update 2. localement modifié et inchangé dans le dépôt : il peut être enregistré sans problème dans le dépôt par commit et n est pas changé par un update 3. localement pas modifié et changé dans le dépôt : commit n a pas d effet, mais update le modifie pour le mettre à jour 4. localement modifié et changé dans le dépôt : commit échoue, update tente de fusionner les modifications et les changements, ou bien laisse l utilisateur régler le conflit

États d un fichier de travail Dans la copie de travail un fichier peut être dans un des 4 cas suivants. 1. localement pas modifié et inchangé dans le dépôt : non concerné par commit ni par update 2. localement modifié et inchangé dans le dépôt : il peut être enregistré sans problème dans le dépôt par commit et n est pas changé par un update 3. localement pas modifié et changé dans le dépôt : commit n a pas d effet, mais update le modifie pour le mettre à jour 4. localement modifié et changé dans le dépôt : commit échoue, update tente de fusionner les modifications et les changements, ou bien laisse l utilisateur régler le conflit

États d un fichier de travail Dans la copie de travail un fichier peut être dans un des 4 cas suivants. 1. localement pas modifié et inchangé dans le dépôt : non concerné par commit ni par update 2. localement modifié et inchangé dans le dépôt : il peut être enregistré sans problème dans le dépôt par commit et n est pas changé par un update 3. localement pas modifié et changé dans le dépôt : commit n a pas d effet, mais update le modifie pour le mettre à jour 4. localement modifié et changé dans le dépôt : commit échoue, update tente de fusionner les modifications et les changements, ou bien laisse l utilisateur régler le conflit

États d un fichier de travail Dans la copie de travail un fichier peut être dans un des 4 cas suivants. 1. localement pas modifié et inchangé dans le dépôt : non concerné par commit ni par update 2. localement modifié et inchangé dans le dépôt : il peut être enregistré sans problème dans le dépôt par commit et n est pas changé par un update 3. localement pas modifié et changé dans le dépôt : commit n a pas d effet, mais update le modifie pour le mettre à jour 4. localement modifié et changé dans le dépôt : commit échoue, update tente de fusionner les modifications et les changements, ou bien laisse l utilisateur régler le conflit

États d un fichier de travail Dans la copie de travail un fichier peut être dans un des 4 cas suivants. 1. localement pas modifié et inchangé dans le dépôt : non concerné par commit ni par update 2. localement modifié et inchangé dans le dépôt : il peut être enregistré sans problème dans le dépôt par commit et n est pas changé par un update 3. localement pas modifié et changé dans le dépôt : commit n a pas d effet, mais update le modifie pour le mettre à jour 4. localement modifié et changé dans le dépôt : commit échoue, update tente de fusionner les modifications et les changements, ou bien laisse l utilisateur régler le conflit

Exemples de commandes La commande svnadmin et les opérations import, checkout, update, commit, export svnadmin c r e a t e /home/ s v n r e p svn import. f i l e : ///home/ s v n r e p / t o t o / t r u n k svn checkout f i l e : ///home/ s v n r e p / t o t o / t r u n k t o t o svn update svn commit m Encore un bug en moins! svn e x p o r t r 345 f i l e : ///home/ s v n r e p / t o t o / t r u n k Quelques autres opérations : list, cat ; help ; status, log ; add, delete, copy, move ; diff, revert, resolved

Exemples de commandes La commande svnadmin et les opérations import, checkout, update, commit, export svnadmin c r e a t e /home/ s v n r e p svn import. f i l e : ///home/ s v n r e p / t o t o / t r u n k svn checkout f i l e : ///home/ s v n r e p / t o t o / t r u n k t o t o svn update svn commit m Encore un bug en moins! svn e x p o r t r 345 f i l e : ///home/ s v n r e p / t o t o / t r u n k Quelques autres opérations : list, cat ; help ; status, log ; add, delete, copy, move ; diff, revert, resolved

Historique très récent (fiabilité?) successeur de CVS 2, lui même basé sur RCS 3 déjà très utilisé en lieu et place de CVS 2 Concurrent Versions System 3 Revision Control System

Quelques états? présent localement mais absent du dépôt! absent localement mais présent dans le dépôt A va être ajouté dans le dépôt C en conflit (changé dans le dépôt et modifié localement au même endroit dans le fichier) G les modifications locales viennent d ête fusionnées avec les changements enregistrés dans le dépôt D va être supprimé du dépôt M localement modifié U vient d être modifié par une mise à jour (update)

Le dépôt Le niveau de sécurité et de confidentialité dépend du type de serveur utilisé : file utilise le contrôle d accès du système d exploitation svn utilise un serveur spécifique (svnserve), contrôle d accès minimaliste svn+ssh idem svn mais avec une couche ssh assurant un meilleur contrôle d accès et une parfaite confidentialité http utilise un serveur HTTP qui incorpore le protocole WebDAV, contrôle d accès minimaliste https idem avec contrôle d accès par SSL (sécurité optimale) Le système de fichier utilisé dans le dépôt est le plus souvent le système spécifique fsfs.

Les branches Le dépôt est traditionellement organisé comme suit : / projet 1/ trunk/ fichiers tags/ nom de version/fichiers... branches idem projet 2/ idem... Les branches et les tags son créés avec svn copy. La commande svn merge permet d envisager des fusions de branches.

Exemple de branchages