Forum général.général Problème et questions de Makefile

Posté par  .
Étiquettes : aucune
0
24
sept.
2004
Bonjour tout le monde

Je ne maitrise pas le fonctionnement des makefile, même si je connais le mécanisme global (des règles qui en impliquent d'autres, les dates des fichires, etc...). Et là, je tombe sur un Makefile qui me pose problème, en l'occurrence Xerces-c (du C++) sur AIX. Je ne vais pas vous demander de bosser à ma place, mais juste de répondre à quelques questions :

le Makefile principal inclut un fichier Makefile.incl
Celui-ci définit entre autres les variable MAKE_SHARED et MAKE_SHARED_C, dans lesquelles on place la commande à utiliser pour construire la bibliothèque partagée Xerces.

Or cette variable n'est utiisée nulle part, dans aucun script ni rien. Et pourtant la commande est belle et bien executée ! J'ai mis 'toto' à la place pur voir, et je me suis bien fait engueuler pour cause d'absence de commande 'toto'.

La commande construisant la librairie semble être :
${MAKE} -C $(XML_OBJ_DIR)/.. -k $(MAKE_FLAGS)

Quelle magie noire permet à make d'utiliser une variable sans qu'on le lui demande ??

Autre truc : partout la commande utilisée dans les règles du makefile est de cette forme :
${MAKE} -C $(VALIDATORS_DIR) $(MAKE_FLAGS)
(comme d'ailleurs la commande précédente aussi)

or la variable MAKE n'est jamais définie !

comment tout ceci marche-t-il ?

J'aimerais vraiment que l'on m'explique...

Merci beaucoup !

François
  • # Règles implicites

    Posté par  . Évalué à 4.

    C'est peut-être une histoire de règle implicite. Dans Gnu Make par exemple, tu peux avoir une règle de la forme:

    $(CC) -c $(CPPFLAGS) $(CFLAGS)

    sans que tu n'aies besoin de l'écrire explicitement. Donc tu peux modifier la valeur de CC par exemple, et ça sera pris en compte alors que tu auras l'impression que cette variable n'est utilisée nulle part dans ton Makefile.

    Je n'ai pas trouvé de référence à MAKE_SHARED dans la doc de Gnu Make, donc c'est probablement spécifique au make de AIX, mais j'imagine que c'est le même principe...
  • # J'ai trouvé (que) ça

    Posté par  . Évalué à 1.

    http://www.mail-archive.com/xerces-cvs%40xml.apache.org/msg03572.ht(...)

    Sinon tente un grep -r MAKE_SHARED * à la racine du projet.
    • [^] # Re: J'ai trouvé (que) ça

      Posté par  . Évalué à 2.

      Bon, effectivement MAKE_SHARED est utilisé dans obj/Makefile.in, et défini dans src/xerces/Makefile.incl

      donc le fichier Makefile.in est utilisé lors du make ?
      je vais voir si make utilise effectivement autoqquech lors de son exécution... sinon ça voudrait dire que la modification que je fais dans Makefile.incl doit etre faite avant le ./configure ?
  • # En passant ...

    Posté par  . Évalué à 2.

    Y'a un forum sûrement plus approprié pour cette question

    - Programmation.c
    - Programmation.c++
    • [^] # Re: En passant ...

      Posté par  . Évalué à 2.

      bof... si ça avait été du fortran j'aurais eu le même problème je pense
      • [^] # Encore mieux

        Posté par  . Évalué à 2.

        Bien vu pour le fortran ;)

        Mais dans ce cas :
        - Programmation.autre

        je lâche jamais

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.