Make file incluant des bibliothèques

Résolu
sarah -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'essaye d'écrire un make file qui sert à générer le .s d'un fichier .c

ce fichier .c utilise des bib
exemple:
#include <algo/blast/core/blast_def.h>

comment faire?
merci
Configuration: Windows XP
Internet Explorer 6.0

10 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ce n'est pas un problème spécifique à Makefile mais plutôt à gcc. Il faut que tu précises à gcc ou trouver les headers qui ne sont pas dans un répertoire standard. Ton "algo/blast/core/blast_def.h".

    En supposant que ce fichier soit dans /usr/local/pouet/include/algo/blast/core/blast_def.h, il faut passer à gcc l'option :
    -I/usr/local/pouet/include

    (tu peux aussi utiliser -isystem). Exemple :
    gcc -c -W -Wall -I/usr/local/pouet/include mon_module.c

    Si le programme plante au linkage, il faut que tu passes en paramètre de gcc le binaire de la librairie en paramètre ou une manière d'y accéder. Tout ce qui suit, contrairement au -I, ne concerne que la compilation de l'exécutable, pas celle des fichiers .o.

    - si c'est un .a (librairie statique), elle se passe en paramètre à gcc au même titre qu'un .o au moment de construire l'exécutable

    - si c'est un .so (libraire dynamique), par exemple libpouet.so, il faut passer à gcc l'option :
    -lpouet

    Exemple :
    gcc -W -Wall -I/usr/local/pouet/include -o mon_executable main.c module.o libplop.a -lpouet

    Si de plus la librairie pouet n'est pas dans un répertoire standard (par exemple /usr/local/pouet/lib), il faut lui dire ou la trouver à l'aide des options -Wl,R et -L (s'utilise de la même façon que -I et -isystem, sauf que c'est pour les librairies).
    gcc -W -Wall -I/usr/local/pouet/include -L/usr/local/pouet/lib -Wl,R/usr/local/pouet/lib -o mon_executable main.c module.o libplop.a -lpouet


    Si ceci n'est pas clair je t'invite à fouiller un peu le forum ce sont des choses que j'ai déjà expliquées par le passé.

    Si tu as le choix entre .a et .so :
    - choisis .a si tu veux que le programme soit facilement exécutable sur une plateforme. Concrètement le binaire de la librairie est copié dans l'exécutable, donc pas besoin pour l'utilisateur de déployer la librarie. Mais ton programme ne tirera pas partie des mises à jours éventuelles de la librairie à moins de le recompiler.
    - choisis le .so si tu veux que le programme soit plus petit. Il faut que le .so soit présent sur la machine. L'avantage c'est que si le .so est mis à jour, ton programme en bénéficie.

    Bonne chance
    5
  2. sarah
     
    salut

    oooooooook, ça marche , il connait le premier fichie .h
    mais le problème c'est que ce dernier fichier inclu des autres fichiers qui se trouvent dans un répertoire complètement différent,
    donc je dois organiser ça dans un makefile, n'est ce pas
    parce qu il y a beaucoup d includes

    bon s'il vous plait donnez moi où mettre ces lignes de spécifications des includes pour les fichiers .h
    parce que je vais pas les compiler comme pour le cas des .c

    merci
    1
  3. sarah
     
    bonjour
    merci pour votre réponse mais au fait moi j'utilise icc

    et avec : icc -c -W -Wall -I/usr/local/pouet/include blast_lookup.c

    il me affiche l'erreur suivante:
    blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
    #include <include/blast_def.h>
    ^

    compilation aborted for blast_lookup.c (code 4)
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    il y a un include de trop, non ?
    icc -c -W -Wall -I/usr/local/pouet blast_lookup.c

    puisque:
    #include <include/blast_def.h>
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sarah
     
    salut

    merci mais au fait, non

    #include <include/blast_def.h>
    c'est le premier fichier à inclure

    les fichiers sont bien dans le repertoire: users/ladj/Dounia/blast/include
    y compris:blast_def.h

    d'abors il accepte pas le -W:
    icc: Command line remark: option '-W' not supported

    et puis quand j'exclu le -W et je fais:
    icc -c -Wall -I/users/ladj/Dounia/blast/include blast_lookup.c

    il me signale:
    blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
    #include <include/blast_def.h>
    ^

    compilation aborted for blast_lookup.c (code 4)

    merci
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    avec
    -I/users/ladj/Dounia/blast/include
    et
    #include <include/blast_def.h>
    il va chercher blast_def.h dans /users/ladj/Dounia/blast/include/include
    non ?
    0
  8. sarah
     
    salut

    ooh, oui désolé, au fait j'ai fait une confusion avec les deux includes ;)

    merci beaucoup
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    utiliser plusieurs -I
    0
  10. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Comme dit dubcek, tout simplement : -I/usr/local/pouet/include -I/usr/local/plop/include
    Normalement un paramètre passé par -I devrait toujours finir par "/include".

    De même un paramètre passé par -L ou -Wl,R devrait toujours finir par "/lib". De manière complètement similaire à l'option -I, tu peux mettre plusieurs -L / -Wl,R dans une ligne de compilation.

    Bonne chance
    0
    1. sarah
       
      ooooooooook
      merci beaucoup ça marche très bien
      0
  11. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Yep :-)

    Bonne continuation
    0