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 :

Problème de Makefile


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Par défaut Problème de Makefile
    Bonjour,

    Tout d'abord, je ne suis pas un habitué des Makefile, j'ai besoin de m'y mettre et mon livre sur ces derniers est à la maison.

    Vous allez voir mon Makefile est très court, loin d'être fini forcément. Justement peut être qu'il me manque quelque chose pour qu'il fonctionne correctement.

    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
    BUILDROOT_NAME = buildroot
    BUILDROOT_FILE_PATH = downloads
    BUILDROOT_SITE = <a href="http://buildroot.uclibc.org/downloads" target="_blank">http://buildroot.uclibc.org/downloads</a>
    BUILDROOT_VERSION = 2009.05
    BUILDROOT_DIR := $(BUILDROOT_NAME)-$(BUILDROOT_VERSION)
    BUILDROOT_SOURCE := $(BUILDROOT_NAME)-$(BUILDROOT_VERSION).tar.bz2
     
    #_TOPDIR := $(shell pwd)
    #export _TOPDIR
     
    TAR_OPTIONS = --exclude=.svn -xf
     
    #default: all
     
     
    $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE):
            mkdir -p $(BUILDROOT_FILE_PATH)
            wget --passive-ftp -P $(BUILDROOT_FILE_PATH) $(BUILDROOT_SITE)/$(BUILDROOT_SOURCE)
     
    $(BUILDROOT_FILE_PATH)/.unpacked: $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE)
            tar $(TAR_OPTIONS) $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE) -
            touch $@
    Je télécharge bien mon archive mais impossible de la décompresser, si j'enlève $(BUILDROOT_FILE_PATH)/.unpacked: $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE) pas de soucis. Bref je ne comprends pas pourquoi cela ne s'enchaîne pas même en enlevant le prérequis.

    Une erreur de syntaxe ou je passe simplement à côté de quelque chose de gros ?

    Merci

    PS : je m'inspire d'un autre makefile fonctionnant correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE):
    	mkdir -p $(BUILDROOT_FILE_PATH)
    	wget --passive-ftp -P $(BUILDROOT_FILE_PATH)  $(BUILDROOT_SITE)/$(BUILDROOT_SOURCE)
     
    $(BUILDROOT_DIR)/.unpacked: $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE) $(PATCH_DIR)/*.diff
    	bzcat $(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE) | \
    	tar -C $(BUILDROOT_DIR)/.. $(TAR_OPTIONS) -
    	$(BUILDROOT_DIR)/toolchain/patch-kernel.sh $(BUILDROOT_DIR) $(PATCH_DIR) \*.diff 
    # Since patches may add/delete packages, we process extra packages after patching
    	perl $(PATCH_DIR)/add_packages_config_entry.pl buildroot=$(BUILDROOT_DIR)
    	touch $@
    C'est pour ça que je me dis que ce n'est peut être pas dans ces lignes elles-même que se situe le problème mais dans des lignes que je n'aurais pas encore mises dans mon Makefile.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Par défaut
    Salut,

    Pourrais tu nous décrire un peu mieux ton erreur ? Y a t'il une erreur de syntaxe ? Il ne se passe rien ? make dit que la cible est à jour, ou qu'il n'y a rien à faire pour cette cible ?

    Sinon, les commandes que tu exécutes doivent être précédées d'une tabulation, une vraie, pas plusieurs espaces (je ne dis pas que ce n'est pas le cas, mais vérifie on sait jamais).
    D'autre part, l'ordre des regles n'est pas important, sauf pour la première car c'est celle la qui est exécutée quand tu tapes simplement make. Ici je pense qu'il serait plus logique que ça soit la deuxième, puisqu'elle dépend de la première. Je pense que ton makefile tel qu'il est n'execute jamais la deuxième regle, sauf si tu l'appelles directement en lançant make.

    Tu peux utiliser également la rêgle .PHONY, qui permet d'exécuter une regle meme si elle est à jour. Ca serait utile pour ta première regle ([FONT=monospace] [/FONT]$(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE): ), car elle n'a pas de dépendance, donc le dossier auquel elle fait allusion sera toujours plus récent que ces dépendances -> elle ne sera jamais reconstruite.


    Dans tous les cas, un petit coup d'oeil ici ne peux faire que du bien.

    Bon courage et tiens nous au courant

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Par défaut
    Je suis justement plongé dans mon livre sur GNU Make et effectivement le soucis vient je pense de l'ordre (pas encore testé). Seule la première target est exécutée ce qui expliquerait mon soucis et ce qui correspond à ce qu'il se passe. Ce que je ne comprends pas c'est que j'ai le même ordre dans mon Makefile de référence mais il faut que je jette un oeil de plus près et ce qu'il se passe pour les phony target, j'ai du loupé quelque chose.

    Je continue de parcourir un peu ce livre fort intéressant et je ferai le test. Au passage, je me demande autotools ou makefile manuel ? Je pense que l'on me dira que les autotools sont "simples" à mettre en oeuvre et sont un plus pour compiler son soft sur diverses plateformes. Alors dans quel cas vaut-il mieux faire son Makefile à la main ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Par défaut
    Oui c'était juste une histoire d'ordre ou en laissant tel quel, ajouter une target all (par exemple) avec comme prérequis $(BUILDROOT_FILE_PATH)/.unpacked

    Je me doutais que ce n'était pas grand chose mais je n'avais pas vraiment de doc disons synthétique sous la main !

    Sinon :
    Tu peux utiliser également la rêgle .PHONY, qui permet d'exécuter une regle meme si elle est à jour. Ca serait utile pour ta première regle ([FONT=monospace] [/FONT]$(BUILDROOT_FILE_PATH)/$(BUILDROOT_SOURCE): ), car elle n'a pas de dépendance, donc le dossier auquel elle fait allusion sera toujours plus récent que ces dépendances -> elle ne sera jamais reconstruite.
    Elle est construite la première fois et c'est ce que je souhaite : aller chercher l'archive seulement la première fois.




    Merci

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

Discussions similaires

  1. [Makefile] Problème lancement Makefile dans Shell
    Par domiq44 dans le forum Systèmes de compilation
    Réponses: 14
    Dernier message: 29/11/2006, 15h17
  2. Problème de makefile (Eclipse CDT)
    Par david cap dans le forum Eclipse C & C++
    Réponses: 3
    Dernier message: 23/11/2006, 11h17
  3. Problème avec Makefile
    Par beb30 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 02/03/2006, 15h02
  4. [Dev-cpp]Problème de Makefile
    Par gege2061 dans le forum Dev-C++
    Réponses: 2
    Dernier message: 15/02/2005, 11h19
  5. Problème avec makefile
    Par snooopppp dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 22/02/2004, 15h46

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