Changes between Version 9 and Version 10 of CaoCourseTme2


Ignore:
Timestamp:
Feb 16, 2007, 1:15:49 PM (18 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme2

    v9 v10  
    6262== Le processus de construction : Makefile ==
    6363
    64  1. Completez la liste des dépendances lignes 24 à 28.
     64 1. Completez la liste des dépendances pour les cibles : {{{main.o ... namealloc.o}}}.
    6565 1. Réécrivez les commandes en utilisant les variables automatiques : {{{$@ $< $^}}}
    6666    * {{{$@}}} : désigne la cible d'une règle.
     
    7575'''Fichier Makefile'''
    7676{{{
    77   1 # Definition des commandes
    78   2 CC      = gcc
    79   3 AR      = ar
    80   4 RM      = rm
    81   5 INDENT  = indent
    82   6 
    83   7 # Definition des parametres
    84   8 LDFLAGS = -p
    85   9 CFLAGS  = -g -p -Wall -ansi -Werror
    86  10 ARFLAGS = -r
    87  11 IDFLAGS = -gnu  -bli0 -npsl -l90
    88  12
    89  13 # Definition de la liste des librairies necesaires a l'edition de lien
    90  14 LDLIBS  = -L. -lhte
    91  15
    92  16 .PHONY: all clean realclean
    93  17
    94  18 stat : main.o count.o libhte.a
    95  19         $(CC) $(LDFLAGS) main.o count.o -o stat $(LDLIBS)
    96  20
    97  21 libhte.a : hte.o dico.o dejavu.o namealloc.o
    98  22         $(AR) $(ARFLAGS) libhte.a hte.o dico.o dejavu.o namealloc.o
    99  23
    100  24 main.o:
    101  25 count.o:
    102  26 hte.o:
    103  27 dejavu.o:
    104  28 namealloc.o:
    105  29
    106  30 all: clean stat
    107  31
    108  32 clean:
    109  33         $(RM) *.o *.a *.out *~ 2> /dev/null || true
    110  34
    111  35 realclean: clean
    112  36         $(RM) stat 2> /dev/null || true
    113  37
    114  38 indent:
    115  39         $(INDENT) $(IDFLAGS) *.c *.h
     77# Definition des commandes
     78CC      = gcc
     79AR      = ar
     80RM      = rm
     81INDENT  = indent
     82 
     83# Definition des parametres
     84LDFLAGS = -p
     85CFLAGS  = -g -p -Wall -ansi -Werror
     86ARFLAGS = -r
     87IDFLAGS = -gnu  -bli0 -npsl -l90
     88 
     89# Definition de la liste des librairies necesaires a l'edition de lien
     90LDLIBS  = -L. -lhte
     91}}}
     92{{{
     93.PHONY: all clean realclean
     94 
     95stat : main.o count.o libhte.a
     96        $(CC) $(LDFLAGS) main.o count.o -o stat $(LDLIBS)
     97
     98libhte.a : hte.o dico.o dejavu.o namealloc.o
     99        $(AR) $(ARFLAGS) libhte.a hte.o dico.o dejavu.o namealloc.o
     100
     101main.o:
     102count.o:
     103hte.o:
     104dejavu.o:
     105namealloc.o:
     106 
     107all: clean stat
     108 
     109clean:
     110        $(RM) *.o *.a *.out *~ 2> /dev/null || true
     111
     112realclean: clean
     113        $(RM) stat 2> /dev/null || true
     114
     115indent:
     116        $(INDENT) $(IDFLAGS) *.c *.h
    116117}}}
    117118
     
    155156'''Fichier main.c'''
    156157{{{
    157   1 #include <stdlib.h>
    158   2 #include <stdio.h>
    159   3 #include <getopt.h>
    160   4 #include "main.h"
    161   5 #include "count.h"
    162   6 #include "hte.h"
    163   7
    164   8 struct mainarg_s MAINARG;
    165   9
    166  10 void usage (char *command)
    167  11 {
    168  12     printf ("\nStatistique Diverses\n");
    169  13     printf ("Usage  : %s
    170  14             [-v] [-o OutFile] InFile\n", command);
    171  15     printf ("-v          verbose mode\n");
    172  16     printf ("-o OutFile  output file (stdout by default)\n\n");
    173  17     exit (EXIT_FAILURE);
    174  18 }
    175  19
    176  20 void getarg (int argc, char **argv)
    177  21 {
    178  22     extern char *optarg;
    179  23     extern int optind;
    180  24     char option;
    181  25
    182  26     MAINARG.OUTPUTFILE = NULL;
    183  27     while ((option = getopt (argc, argv, "vo:")) != EOF)
    184  28         switch (option)
    185  29         {
    186  30         case 'v':
    187  31             MAINARG.VERBOSE = 1;
    188  32             fprintf (stderr, "Verbose mode\n");
    189  33             break;
    190  34
    191  35         case 'o':
    192  36             if (MAINARG.VERBOSE)
    193  37                 fprintf (stderr, "Fichier de sortie : %s\n", optarg);
    194  38
    195  39             MAINARG.OUTPUTFILE = fopen (optarg, "w");
    196  40             if (MAINARG.OUTPUTFILE == NULL)
    197  41             {
    198  42                 fprintf (stderr, "%s: %s: \n", argv[0], optarg);
    199  43                 perror ("fopen");
    200  44                 exit (EXIT_FAILURE);
    201  45             }
    202  46             break;
    203  47
    204  48         case '?':
    205  49         default:
    206  50             usage (argv[0]);
    207  51         }
    208  52     if ((optind + 1) != argc)
    209  53     {
    210  54         usage (argv[0]);
    211  55     }
    212  56     else
    213  57     {
    214  58         if (MAINARG.VERBOSE)
    215  59             fprintf (stderr, "Fichier d'entrée : %s\n", argv[optind]);
    216  60
    217  61         MAINARG.INFILE = fopen (argv[optind], "r");
    218  62         if (MAINARG.INFILE == NULL)
    219  63         {
    220  64             fprintf (stderr, "%s: %s ", argv[0], argv[optind]);
    221  65             perror ("fopen");
    222  66             exit (EXIT_FAILURE);
    223  67         }
    224  68         if (MAINARG.OUTPUTFILE == NULL)
    225  69             MAINARG.OUTPUTFILE = stdout;
    226  70     }
    227  71 }
    228  72
    229  73 int main (int argc, char **argv)
    230  74 {
    231  75     getarg (argc, argv);
    232  76     count (MAINARG.INFILE);
    233  77     fclose (MAINARG.OUTPUTFILE);
    234  78     return EXIT_SUCCESS;
    235  79 }
     158include <stdlib.h>
     159#include <stdio.h>
     160#include <getopt.h>
     161#include "main.h"
     162#include "count.h"
     163#include "hte.h"
     164}}}
     165{{{
     166struct mainarg_s MAINARG;
     167}}}
     168{{{
     169void usage (char *command)
     170{
     171    printf ("\nStatistique Diverses\n");
     172    printf ("Usage  : %s
     173            [-v] [-o OutFile] InFile\n", command);
     174    printf ("-v          verbose mode\n");
     175    printf ("-o OutFile  output file (stdout by default)\n\n");
     176    exit (EXIT_FAILURE);
     177}
     178}}}
     179{{{
     180void getarg (int argc, char **argv)
     181{
     182    extern char *optarg;
     183    extern int optind;
     184    char option;
     185
     186    MAINARG.OUTPUTFILE = NULL;
     187    while ((option = getopt (argc, argv, "vo:")) != EOF)
     188        switch (option)
     189        {
     190        case 'v':
     191            MAINARG.VERBOSE = 1;
     192            fprintf (stderr, "Verbose mode\n");
     193            break;
     194
     195        case 'o':
     196            if (MAINARG.VERBOSE)
     197                fprintf (stderr, "Fichier de sortie : %s\n", optarg);
     198
     199            MAINARG.OUTPUTFILE = fopen (optarg, "w");
     200            if (MAINARG.OUTPUTFILE == NULL)
     201            {
     202                fprintf (stderr, "%s: %s: \n", argv[0], optarg);
     203                perror ("fopen");
     204                exit (EXIT_FAILURE);
     205            }
     206            break;
     207
     208        case '?':
     209        default:
     210            usage (argv[0]);
     211        }
     212    if ((optind + 1) != argc)
     213    {   
     214        usage (argv[0]);
     215    }   
     216    else
     217    {   
     218        if (MAINARG.VERBOSE)
     219            fprintf (stderr, "Fichier d'entrée : %s\n", argv[optind]);
     220
     221        MAINARG.INFILE = fopen (argv[optind], "r");
     222        if (MAINARG.INFILE == NULL)
     223        {
     224            fprintf (stderr, "%s: %s ", argv[0], argv[optind]);
     225            perror ("fopen");
     226            exit (EXIT_FAILURE);
     227        }
     228        if (MAINARG.OUTPUTFILE == NULL)
     229            MAINARG.OUTPUTFILE = stdout;
     230    }   
     231}
     232}}}
     233{{{
     234int main (int argc, char **argv)
     235{
     236    getarg (argc, argv);
     237    count (MAINARG.INFILE);
     238    fclose (MAINARG.OUTPUTFILE);
     239    return EXIT_SUCCESS;
     240}
    236241}}}
    237242