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

Linux Discussion :

Problème avec un Makefile


Sujet :

Linux

  1. #1
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut Problème avec un Makefile
    Bonjour tout le monde,

    J'ai un ptit problème avec Makefile que je suis en train d'écrire. J'ai essayé d'adopté une écriture plus généraliste, avec la gestions des répertoires etc...

    Cependant, il ne semble pas prendre en compte la regle de substitution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    %.o: $(DRSC)/%.c
    	$(CC) $(CFLAGS) -o $@ -c $<
    Voici mon Makefile complet :

    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
     
    ########
    # Path #
    ########
    DSRC	= src
    DINC	= inc
    DOBJ	= obj
    DEXE	= .
    DLIB	= obj
     
    ##############################
    # Complete this to make it ! #
    ##############################
    NAME 	= accind_saisie	
    SRC	= accind_saisie.c accind_flot.c exit_if.c
    INCL  	= accind_flot.h exit_if.h
     
    ################
    # Optional add #
    ################
    IPATH	= -I$(DINC)
    LPATH	= -L$(DLIB)
    OBJOPT  = -W -Wall -std=c99
    EXEOPT  = -W -Wall -std=c99
     
    #####################
    # Macro Definitions #
    #####################
    CC 	= gcc
    CXX 	= g++
    MAKE 	= make
    SHELL	= /bin/sh
    OBJS	= $(SRC:.c=.o)
    DOBJS 	= $(addprefix $(DOBJ)/, $(SRC:.c=.o))
    RM 	= /bin/rm -f 	
     
    CFLAGS  = $(OBJOPT) $(IPATH)
    LDFLAGS = $(EXEOPT) $(LPATH)
     
    ##############################
    # Basic Compile Instructions #
    ##############################
    all: $(NAME)
     
    $(NAME): $(OBJS) 
    	$(CC) $(DOBJS) $(LDFLAGS) -o $(NAME) 
     
    clean:
    	-$(RM) $(NAME) $(DOBJS) *~
     
    %.o: $(DRSC)/%.c
    	$(CC) $(CFLAGS) -o $@ -c $<
    Volontairement, je ne gère pas encore les dépendances des fichiers .h avec les .o. Je m'occuperai de cela au moment ou il trouvera deja la règle.

    Voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    kal@kal-desktop ~/work/accInd $ make
    make: *** Pas de règle pour fabriquer la cible « accind_saisie.o », nécessaire pour « accind_saisie ». Arrêt.

  2. #2
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Bon, j'ai reussi

    J'ai googlé un peu, et je suis tombé sur la merveilleuse variable vpath qui m'a bien aidé

    Voici mon Makefile final, si ça peut aider :

    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
    86
     
    ##
    ## Makefile
    ## Login : <kal@kal-desktop>
    ## Started on  Thu Aug  3 17:04:38 2006 
    ## $Id$
    ## 
    ## Copyright (C) 2006 
    ## This program is free software; you can redistribute it and/or modify
    ## it under the terms of the GNU General Public License as published by
    ## the Free Software Foundation; either version 2 of the License, or
    ## (at your option) any later version.
    ## 
    ## This program is distributed in the hope that it will be useful,
    ## but WITHOUT ANY WARRANTY; without even the implied warranty of
    ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    ## GNU General Public License for more details.
    ## 
    ## You should have received a copy of the GNU General Public License
    ## along with this program; if not, write to the Free Software
    ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    ##
     
    ########
    # Path #
    ########
    vpath %.c src
    vpath %.h include
    vpath %.o obj
    DOBJ = obj
    DINC = include
    DLIB = .
     
    ##############################
    # Complete this to make it ! #
    ##############################
    NAME 	= accind_saisie
    SRC	= accind_saisie.c accind_flot.c exit_if.c
    INCL  	= accind_flot.h exit_if.h
     
    ################
    # Optional add #
    ################
    IPATH	= -I $(DINC)
    LPATH	= -L $(DLIB)
    OBJOPT  = -W -Wall -std=c99
    EXEOPT  = -W -Wall -std=c99
     
    #####################
    # Macro Definitions #
    #####################
    CC 	= gcc
    CXX 	= g++
    MAKE 	= make
    SHELL	= /bin/sh
    OBJS	= $(SRC:.c=.o)
    DOBJS	= $(addprefix $(DOBJ)/, $(OBJS))
    RM 	= /bin/rm -f
     
    CFLAGS  = $(OBJOPT) $(IPATH)
    LDFLAGS = $(EXEOPT) $(LPATH)
     
    ##############################
    # Basic Compile Instructions #
    ##############################
    all: $(NAME)
     
    $(NAME): $(OBJS) 
    	$(CC) $(DOBJS) -o $(NAME) 
     
    clean:
    	-$(RM) $(NAME) $(DOBJS) *~
     
    %.o: %.c
    	$(CC) $(CFLAGS) -o $(DOBJ)/$@ -c $<
     
     
    ################
    # Dependencies #
    ################
     
    accind_flot.o: accind_flot.h
     
    exit_if.o: exit_if.h
     
    accind_saisie.o: accind_saisie.c accind_flot.h exit_if.h

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

Discussions similaires

  1. Compiler avec un makefile
    Par _SamSoft_ dans le forum Systèmes de compilation
    Réponses: 15
    Dernier message: 27/05/2007, 12h01
  2. [Makefile] GCC sous Linux : /usr/bin/ld: cannot find -lsocket
    Par erroneus dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 25/05/2007, 16h26
  3. Compiler avec un makefile
    Par _SamSoft_ dans le forum C
    Réponses: 7
    Dernier message: 17/05/2007, 12h48
  4. problème avec perl Makefile.PL
    Par flores dans le forum Modules
    Réponses: 2
    Dernier message: 30/10/2005, 19h09
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30

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