IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

CLIB et portabilité d'un programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut CLIB et portabilité d'un programme
    Bonjour,

    Je développe actuellement un "mini-projet" en C utilisant la bibliothèque CLIB, et je pense bientôt (dès qu'il sera achevé) le distribuer sur mon site perso.

    J'aimerais que les utilisateurs d'autres systèmes que Windows (qui eux téléchargeront l'éxécutable) puissent compiler le projet correctement (notamment sous les systèmes UNIX).

    Je pense donc créer un fichier make.

    Quelle est la meilleure façon d'intégrer la bibliothèque CLIB au projet, sachant que je n'utilise que les fonctions de io.c ? (io.c incluant d'autres fichiers d'en tête de CLIB). Est-ce que les futurs utilisateurs devront forcément construire chez eux CLIB ? Comment assurer un maximum de portabilité ?

    Par avance, merci.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par odsen.s
    Je développe actuellement un "mini-projet" en C utilisant la bibliothèque CLIB, et je pense bientôt (dès qu'il sera achevé) le distribuer sur mon site perso.

    J'aimerais que les utilisateurs d'autres systèmes que Windows (qui eux téléchargeront l'éxécutable) puissent compiler le projet correctement (notamment sous les systèmes UNIX).

    Je pense donc créer un fichier make.
    Makefile. Bonne idée.
    Quelle est la meilleure façon d'intégrer la bibliothèque CLIB au projet, sachant que je n'utilise que les fonctions de io.c ? (io.c incluant d'autres fichiers d'en tête de CLIB). Est-ce que les futurs utilisateurs devront forcément construire chez eux CLIB ? Comment assurer un maximum de portabilité ?
    J'ai déjà installé la CLIB/ED sur plusieurs cibles comme

    PC/DOS en mode réel (x86 16-bit)
    PC/Windows en mode protégé (x86 32-bit)
    Carte avec MC68302 (Core : Freescale 68000)
    Carte avec MPC (Core : Freescale Power PC) sous pSOS, et GNU/Linux pour PPC)

    Voici un Make file que j'utilisais pour une de més applications embarquées pour générer une partie de la CLIB/ED :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    CC = $(CROSS_COMPILE)gcc
    AR= $(CROSS_COMPILE)ar
    CDIR = $(HOME)/clib
    SDIR = $(CDIR)/ed/src
    IDIR = $(CDIR)/ed/inc
    ODIR = ./out
    CFLAGS = -O2 -Wall -W \
              -I$(CDIR) \
              -DDBG_SYSALLOC
     
    BIN = libed.a
     
    OBJS = \
           $(ODIR)/ascii.o \
           $(ODIR)/cnt.o \
           $(ODIR)/fstr.o \
           $(ODIR)/io.o  \
           $(ODIR)/ra.o \
           $(ODIR)/str.o \
           $(ODIR)/sysalloc.o \
           $(ODIR)/tok.o \
           $(ODIR)/sys.o
     
    DEPS = \
           $(IDIR)/ascii.h \
           $(IDIR)/cnt.h \
           $(IDIR)/fstr.h \
           $(IDIR)/io.h \
           $(IDIR)/ra.h \
           $(IDIR)/str.h \
           $(IDIR)/sysalloc.h \
           $(IDIR)/tok.h \
           $(IDIR)/sys.h\
           Makefile
     
    all:
    	make $(BIN)
     
    $(BIN): $(OBJS)
    	$(AR) -r $@ $^
     
    $(ODIR)/ascii.o:  $(SDIR)/ascii.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/cnt.o:  $(SDIR)/cnt.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/fstr.o:  $(SDIR)/fstr.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/io.o:  $(SDIR)/io.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/ra.o:  $(SDIR)/ra.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/str.o:  $(SDIR)/str.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/sysalloc.o:  $(SDIR)/sysalloc.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/tok.o:  $(SDIR)/tok.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/sys.o:  $(SDIR)/sys.c\
             $(DEPS)
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    #install:
    #	install -C -p -s $(BIN) /usr/local/sbin/
     
    clean:
    	rm -f $(BIN) $(OBJS)
     
    cleanall:
    	rm -f *~
    Tu devrais pouvoir t'en inspirer...

    Une fois la bibliothèque construite, un simple -led suffit (si on sait où est la bibliothèque).

    Exemple de Makefile d'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    CC = $(CROSS_COMPILE)gcc
    KDIR = $(HOME)/bles/AEMODSL_BLES/aemodsl_bles_linux/include
    SDIR = ./src
    COMDIR = ./../..
    CLIBDIR = $(HOME)/clib
    IDIR = ./inc
    ODIR = ./out
    CFLAGS = -O2 -Wall -W \
              -I$(KDIR) -I. -I$(COMDIR) -I$(CLIBDIR)\
              -DDBG_SYSALLOC -DNO_TYPES
     
    BIN = tuleds
     
    OBJS = \
           $(ODIR)/tools.o\
           $(ODIR)/main.o
     
    DEPS = \
           $(COMDIR)/common/tools.h\
           Makefile
     
    all:
    	touch $(SDIR)/main.c
    	make $(BIN)
     
    $(BIN): $(OBJS)
    	$(CC) -L$(COMDIR)/clib -o $@ $^ -led
     
    $(ODIR)/main.o:  $(SDIR)/main.c\
             $(DEPS)
    	ind $<
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    $(ODIR)/tools.o:  $(COMDIR)/common/src/tools.c\
             $(DEPS)
    	ind $<
    	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
     
    #install:
    #	install -C -p -s $(BIN) /usr/local/sbin/
     
    clean:
    	rm -f $(BIN) $(OBJS)
     
    cleanall:
    	rm -f *~

  3. #3
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Bonjour Emmanuel,

    Merci de m'aider

    J'ai oublié de préciser que je n'ai encore jamais fait de Makefile.
    Je lis cette page, je regarde tes makefiles et je te tiens au courant de l'avancement des choses.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par odsen.s
    J'ai oublié de préciser que je n'ai encore jamais fait de Makefile.
    Ouch ! Ca fait beaucoup de choses nouvelles d'un coup...

    Un exemple simple ici :

    http://emmanuel-delahaye.developpez.com/codage.htm

    Un mini tuto là :

    http://emmanuel-delahaye.developpez.com/make.htm

  5. #5
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Ouch ! Ca fait beaucoup de choses nouvelles d'un coup...
    Eh oui !

    Je te remercie pour les liens vers tes pages.
    Je vais regarder.

Discussions similaires

  1. problème de portabilité d'un programme avec tkinter et matplotlib
    Par rafoim dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 13/11/2013, 11h52
  2. Portabilité d'un programme java 1.5 sur 1.6
    Par Bowser dans le forum Général Java
    Réponses: 10
    Dernier message: 06/06/2011, 15h54
  3. Réponses: 2
    Dernier message: 13/09/2009, 17h28
  4. Portabilité d'un programme en C ?
    Par SPACHFR dans le forum Débuter
    Réponses: 7
    Dernier message: 06/06/2007, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo