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 :

verifier l'existence d'un fichier avec le makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut verifier l'existence d'un fichier avec le makefile
    Bonjour !
    Je voudrais savoir s'il est possible (et dans ce cas comment faire) de vérifier la présence d'un fichier dans le repertoire courant avec le makefie.

    Je m'explique :

    J'ai un programme c a compiler, appelé toto.c par exemple, et ensuite, lorsque j'execute ce programme, celui ci utilise un autre fichier executable, toto2. Je voudrais donc que lorsque l'utilisateur lance la compilation avec le makefile, celui ci vérifie automatiquement si le fichier toto2 est bien présent dans le repertoire courant (où se trouve toto.c), et dans le cas contraire affiche un message ou annule la compilation.

    Est ce possible de faire ça avec le makefile ? Si oui comment faire ?

    Merci d'avance

  2. #2
    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
    ton problème n'est pas clair...

    Tu parles de fichier .c, puis d'exécutables, puis de vérification runtime...

    Expose clairement ton problème...
    "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

  3. #3
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Tres bien,j'ai peut etre pas été assez clair, donc je reformule.
    J'ai un fichier toto.c. Je veux le compiler avec un makefile pour avoir un fichier executable toto.
    Ensuite, ce fichier executable lance un autre executable (à l'aide d'un execvp pour ceux qui connaissent) appelé toto2. Ce 2e executable est deja compilé avant et n'a pas besoin d'être recompilé.
    Lors de la compilation du fichier toto.c avec le makefile, je voudrais vérifier que le ficheir toto2 est bien présent dans le meme repertoire que le fichier toto.c.

  4. #4
    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
    Citation Envoyé par Rcanada
    J'ai un fichier toto.c. Je veux le compiler avec un makefile pour avoir un fichier executable toto.
    Ensuite, ce fichier executable lance un autre executable (à l'aide d'un execvp pour ceux qui connaissent) appelé toto2. Ce 2e executable est deja compilé avant et n'a pas besoin d'être recompilé.
    Jusque là pas de problème (quoique pourquoi ne pas l'appeler avec la fonction system() ? )


    Citation Envoyé par Rcanada
    Lors de la compilation du fichier toto.c avec le makefile, je voudrais vérifier que le ficheir toto2 est bien présent dans le meme repertoire que le fichier toto.c.
    C'est là que ça se complique.....

    Pourquoi veux-tu vérifier LORS DE LA COMPILATION de la présence de l'autre exécutable ALORS qu'il sera utilisé au RUNTIME ???
    "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

  5. #5
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Je pourrais gérer l'absence du fichier toto2 lors de l'execution avec le execvp, en regardant s'il l'execution a fonctionné, mais je prefere que dès la compilation, si le ficheir toto2 est absent, l'utilisateur le saches, car celui ci est indispensable au bon fonctionnement du programme toto.

  6. #6
    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
    tu mélanges plusieurs choses....

    1. La compilation, qui permet de créer les exécutables, est faite par le programmeur. Elle est faite une fois pour toutes. C'est TOI qui fait ça.
    2. L'exécution. Elle est faite par l'utilisateur. Elle peut être faite aujoudhui, dans 6 mois, dans 3 ans....


    Donc je recommence, je ne comprends pas...

    • Soit tu veux COMPILER tes 2 programmes.
    • Soit tu veux avertir à l'exécution si il en manque 1.


    Enfin, pour vérifier que l'exécution s'est bien passée, system() le dit aussi, et c'est beaucoup plus simple que execv.. Mais enfin c'est toi qui vois..
    "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

  7. #7
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Voila, en fait je veux faire ça dans le cadre d'un projet. Comme on ne sais pas sous quelle systeme d'exploitation le prof va tester le programme, on ne peut pas le compiler à l'avance et lui envoyer l'executable (car les executable ne sont pas forcément compatibles entre les différentes plateformes).
    Il nous est donc demandé de faire un makefile qui va compiler le programme sur la machine du prof.
    Et je veux etre sur que le prof soit averti s'il manque l'executable toto2 (qui marche forcément sur la machine du prof car c'est lui qui nous l'a envoyé) avant le lancement de notre prog toto.

    En tout cas merci d'essayer de comprendre mon probleme, je suis conscient que ce n'est peut etre pas tres clair.

  8. #8
    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
    Alors 2 solutions :

    • Soit tu fais un script qui :
      • vérifie si le fichier toto2 est là
      • si non, affiche un message et sort
      • si oui compile toto1
      • le lance

    • Soit tu donnes ton makefile tel quel (simple, compile toto1), et tu vérifies à l'exécution que, si toto2 est pas là, tu affiches le message et sort.
    "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

  9. #9
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Ok, par script, est ce que tu veux dire une macro dans le makefile, ou un script à lancer par ligne de commande ?
    Si on peut faire ça dans le makefile (ce que je prefererai) sais tu comment faire ?

  10. #10
    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
    mmmmmm je crois que ça n'est pas possible dans le makefile : il n'y a que des directives de compilation et d'assignations/tests de variables..


    Moi j'aurais dis script de commande...

    Mais si votre prof vous l'a anvoyé, pourquoi ne pas faire un package qui inclue toto2 dans un répertoire bin, un répertoire source avec toto1 et le makefile, et le makefile crée toto1 dans le répertore bin ??
    "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

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par souviron34
    mmmmmm je crois que ça n'est pas possible dans le makefile : il n'y a que des directives de compilation et d'assignations/tests de variables..
    Un makefile sert a executer des commandes en fonction d'un enchainement de regle influencer par la presence et la date de modification de certains fichiers.

    Ces commandes ne sont pas interpretees par make mais par le shell du systeme.
    Il peut s'agir de l'appel a un compilateur mais aussi de n'importe quelle autre commande.
    Meme si Makefile est tres oriente compilation, il est d'ailleurs relativement courant de trouver des Makefile permettant de gerer l'archivage, la sauvegarde, etc.

  12. #12
    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
    Citation Envoyé par gl
    ... gerer l'archivage, la sauvegarde, etc.
    Absolument. Mais pour moi ça fait partie de la compilation (ar etc..)

    Par contre, ça ne me semble pas reflèter correctement, dans le but d'un execrice, l'utilisation d'un makefile par rapport à une autre méthode (comme le PO avait signalé, un test sur l'exécution par exemple) ou un script..
    "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

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par souviron34
    Absolument. Mais pour moi ça fait partie de la compilation (ar etc..)
    Je parlais plutot de la compression (zip, tar.gz) de repertoire, de l'archivage reseau de repertoire local, de la synchronisation de repertoire reseau/local, etc.

    Pas de l'utilsiation d'ar, ranlib, et autre.

  14. #14
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par souviron34
    Absolument. Mais pour moi ça fait partie de la compilation (ar etc..)
    Je parlais plutot de la compression (zip, tar.gz) de repertoire, de l'archivage reseau de repertoire local, de la synchronisation de repertoire reseau/local, etc.

    Pas de l'utilsiation d'ar, ranlib, et autre.

    Citation Envoyé par souviron34
    Par contre, ça ne me semble pas reflèter correctement, dans le but d'un execrice, l'utilisation d'un makefile par rapport à une autre méthode (comme le PO avait signalé, un test sur l'exécution par exemple) ou un script..
    Vu que Makefile se contente d'invoquer les commandes shell en fonction de l'existence et de la date des fichiers. Tout (enfin presque) ce qui est faisable par script shell est possible depuis un Makefile, meme si ce n'est pas forcement la methode la plus simple ni la plus efficace.

    Concernant la question initiale, je serais plutot partisan d'une verification a l'execution et/ou de l'installation du programme complementaire simultanement a la compilation du programm principal.

Discussions similaires

  1. Verifier l'existence d'un fichier
    Par mcorvaisier dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/06/2008, 19h02
  2. Tester l'existence d'un fichier avec XMLHttpRequest
    Par pc.bertineau dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/03/2008, 11h53
  3. [Conception] Verifier l'existence d'un fichier sans même l'ouvrir
    Par vaovao dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/11/2006, 15h44
  4. Shell vérifier l'existence d'un fichier
    Par solp dans le forum Linux
    Réponses: 2
    Dernier message: 03/06/2006, 11h30
  5. Réponses: 6
    Dernier message: 28/09/2005, 14h15

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