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

Vue hybride

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    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 confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    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 très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    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 éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    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 confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    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 éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

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

    Merci encore
    NeoKript

+ 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