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

Systèmes de compilation Discussion :

Probleme makefile mulitplateforme


Sujet :

Systèmes de compilation

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut Probleme makefile mulitplateforme
    Bonjour a tous,
    je souhaite faire un makefile multi-plaforme, qui compile notament sur FreeBSD, sunOS ...
    j'ai essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne 11 : ifeq ($(HOSTTYPE), FreeBSD)
    ligne 12 : CC = gcc
    ligne 13 : else
    ligne 14 : CC = /usr/sfw/bin/gcc
    ligne 15 : endif
    Seulement, j'ai des erreurs lorsque je fait make :
    L.11 : Missing dependency operator.
    L.13 : Need anoperator.

    Merci d'avance
    NeOkript

  2. #2
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    tu devrais plutot essayer de te faire un script shell "configure" qui ecrit dans un fichier par exemple Makefile.rules que tu importes ensuite dans ton makefile.

    exemple :

    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
    configure:
    #!/bin/bash
     
    archi=`uname -s`
    if [ archi = "FreeBSD" ]; then
       echo "CC=gcc" > Makefile.rules
       echo "CFLAGS= ...." >> Makefile.rules
       ...
    else
       echo "CC=/usr/sfw/bin/gcc" > Makefile.rules
       echo "CFLAGS= ...." >> Makefile.rules
       ...
    fi
     
    echo "BIN=monbinaire" >> Makefile.rules
    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
    Makefile
    include Makefile.rules
     
    SRCS=fichier1.c	\
    	fichier2.c
     
    OBJS=$(SRCS:.c=.o)
     
    all:	$(OBJS) $(BIN)
     
    $(BIN): $(OBJS)
    	$(CC) -o $@ $(OBJS)
     
     
    .c.o:
    	$(CC) $(CFLAGS) -o $@ -c $<
    voila, c'est un exemple d'un makefile generique avec un configure il suffit pour compiler ton projet de faire :

    42sh:> ./configure && make

    j'ai ecris cela de memoire, je ne suis pas sur à 100% des symboles etc, à tester, mais l'idée et la, et surtout ce qui compte c'est le principe du configure separé du makefile

  3. #3
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    J'ajoute qu'il existe http://code.google.com/p/waf/ aussi
    C'est une bonne alternative au scripts configure et tout ça
    Compil your life guy!
    The Aures Project

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Merci pour vos réponses, le seul problème est que nous devons compilez avec la commande make et rien d'autre. J'ai presque reussi a faire quelque chose de portable.

    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
     
    OS            =    `uname -s`
    CC_FreeBSD	=	gcc
    CC_SunOS  =	/usr/sfw/bin/gcc
    CFLAGS		=      -g -ggdb3 -O0 -W -Wall -Wstrict-prototypes -ansi -pedantic
    NAME		=       mysh
    FILE		=	main.c
    RM		=	rm -f
    OBJ		=	$(FILE:.c=.o)
    LIB		=	-L. -lmy
    INCLUDE	=      -I.
    CMD		=	$(CC_$(OS)) $(CFLAGS) $(OBJ) $(INCLUDE) $(LIB) -o $(NAME)
     
    $(NAME) : 	$(OBJ)
    		$(CMD)
     
    all :	$(OBJ)
    	$(CMD)
     
    clean : 
    	$(RM) *.o *~ *#
     
    fclean : 
    	$(RM) $(NAME) 
     
    re : fclean all
    Le problème vient de la var OBJ qui ne reconnais pas elle non plus gcc.
    Si vous avez une idee

    Merci d'avance

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    si tu veux que ton makefile fasse les *.o tout seul, il faut que ton compilateur soit dans la variable $(CC) et que tes flags de compile s'appel $(CFLAGS). Avec ton systeme sans configure, c'est pas vraiment possible. Mais si tu donnes une regles explicites pour faire les *.o ca devrai fonctionner.

    Essaye de rajouter dans ton makefile la regles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    .c.o:
    	$(CC_$(OS)) $(CFLAGS) -o $@ -c $<
    cette regle explique au makefile comment faire les *.o à partir des *.c et donc comment "construire" la variable $(OBJS).

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Merci bien,
    ça marche nikel a présent

    Merci encore
    NeoKript

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    j'ajouterais que pour être encore plus souple, tu devrais mettre ton uname dans un script "machine", qui serait appelé au départ, sette le symbole de la machine, construit le nom du fichier à inclure (include Makefile.machine), et ensuite, vogue la galère
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme Makefile et variable
    Par Didier77 dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 13/05/2007, 18h50
  2. probleme Makefile librairie
    Par abennis dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/03/2007, 12h18
  3. Probleme Makefile en C
    Par jro-daemon dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 15/02/2007, 09h25
  4. Réponses: 10
    Dernier message: 02/01/2007, 12h07
  5. Problème Makefile 2.4 vers 2.6 d'un driver
    Par le mage tophinus dans le forum Linux
    Réponses: 2
    Dernier message: 24/05/2005, 20h07

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