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 :

Makefile complet et générique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    .
    Inscrit en
    Décembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Fidji

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Décembre 2009
    Messages : 35
    Par défaut Makefile complet et générique
    Bonsoir

    Je suis en train d'ecrire une makefille assez complet, multiplateforme, et generique .

    Mon but est d'avoir plusieurs dossiers (un pour les sources, un pour mes lib, un pour mes includes, et un pour les objets) mais je n'y arrive pas, je ne vois pas pourquoi :

    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
    NAME		= 
     
    CC_FreeBSD	= /usr/bin
    CC_SunOS	= /usr/sfw/bin
    CC_Linux	= /usr/bin
    SRCDIR		= src
    OBJDIR		= obj
    LIBDIR		= lib
    INCDIR		= include
    BINDIR		= bin
     
    SRC		= main.c			\
    		  is_opt.c			\
    		  my_ls.c
     
    LIB		= -lmy -lmy_printf_`uname -m`-`uname -s` -lmy_x
     
    OBJ		= $(SRC:.c=.o)
    CC		= $(CC_`uname`)/gcc
    LDFLAGS		+= -L$(LIBDIR)/
    CFLAGS		+= -arch `uname -m` -W -Wall -ansi -pedantic -g -ggdb -I$(INCDIR)/
    MKDIR		= mkdir
    RM		= rm -f
    ECHO		= echo -e
     
    $(NAME)		: $(OBJ)
    		  @$(CC) $(CFLAGS) $(OBJDIR)/$(OBJ) -o $(BINDIR)/$(NAME) $(LDFLAGS) $(LIB)
    		  @$(ECHO) '\033[0;32m> Compiled\033[0m'
     
    clean		:
    		  -@$(RM) $(OBJDIR)/$(OBJ)
    		  -@$(RM) *~
    		  -@$(RM) \#*\#
    		  @$(ECHO) '\033[0;35m> Directory cleaned\033[0m'
     
    all		: $(NAME)
     
    fclean		: clean
    		  -@$(RM) $(NAME)
    		  @$(ECHO) '\033[0;35m> Remove executable\033[0m'
     
    re		: fclean all
     
    .PHONY		: all clean re
     
    .c.o		:
    		  -@$(MKDIR) $(OBJDIR)
    		  $(CC) -o $(OBJDIR)/$@ -c $(SRCDIR)/$< $(CFLAGS)
    Il n'arrive pas a me compiler mes .c en .o tout en les mettants dans le dossier obj.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    c'est parce que tu as contradiction entre ce que tu veux faire et la ligne :


  3. #3
    Membre averti
    Homme Profil pro
    .
    Inscrit en
    Décembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Fidji

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Décembre 2009
    Messages : 35
    Par défaut
    C'est a dire ? J e ne vois pas trop en fait

  4. #4
    Membre régulier
    Homme Profil pro
    Consultant SharePoint
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant SharePoint

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut
    je t'aurais bien dis man make (d'ailleurs je te le dit parce qu'il est vraiment complet sous freebsd), mais j'ai le même problème avec le mien.

    Déjà à savoir que quand tu fais un dossier obj sous FreeBSD, il se place dans se dossier pour exécuter ses règles.

    tu peux le voir en faisant des echo des pwd dans ton make . Et rien que par ce fait, tu ne sera pas portable parce que sous Linux ia64 par exemple, il ne se déplace pas ...

    donc déjà ta règle .c.o devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc -o $@ -c ../src/$< CFLAGS
    ensuite tu te retrouvera avec le même problème que moi, cf mon post http://www.developpez.net/forums/d85...enrichi-macro/

    Malkavien

    PS:Tu n'as pas d'incohérence avec la règle juste que ça ne fonctionne pas aussi facilement quand tu veux être propre

  5. #5
    Membre averti
    Homme Profil pro
    .
    Inscrit en
    Décembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Fidji

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Décembre 2009
    Messages : 35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cc -o $@ -c ../src/$< CFLAGS
    Malheureusement sa ne fonctionne pas comme sa :s, le ../src/$< va me renvoyer un ../src//usr/login/ etc.....

Discussions similaires

  1. Un Makefile générique
    Par Ekinoks dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 21/08/2014, 11h55
  2. Makefile générique
    Par kwariz dans le forum Télécharger
    Réponses: 3
    Dernier message: 28/04/2013, 16h22
  3. Makefile générique pour compilation projet C
    Par AuraHxC dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 13/12/2007, 21h29
  4. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16
  5. Réponses: 3
    Dernier message: 07/03/2006, 22h29

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