0 votes

Explication du fichier makefile

xpi_built := $(build_dir)/$(install_rdf) \
             $(build_dir)/$(chrome_manifest) \
             $(chrome_jar_file) \
             $(default_prefs)

xpi_built_no_dir := $(subst $(build_dir)/,,$(xpi_built))

$(xpi_file): $(build_dir) $(xpi_built)
 @echo "Creating XPI file."
 cd $(build_dir); $(ZIP) ../$(xpi_file) $(xpi_built_no_dir)
 @echo "Creating XPI file. Done!"

$(build_dir)/%: %
 cp -f $< $@

$(build_dir):
 @if [ ! -x $(build_dir) ]; \
  then \
    mkdir $(build_dir); \
  fi

Quelqu'un peut-il m'expliquer cette partie du makefile ?

  • $(build_dir)/%: % ainsi que $< y $@ directives
  • deux étiquettes $(build_dir) existe, je suppose que les deux sont exécutés, mais dans quel ordre ?

2voto

Beta Points 37745
$(build_dir)/%: %
    cp -f $< $@

Il s'agit d'une règle statique qui utilise des variables automatiques dans sa commande ; $< se développe jusqu'au prérequis le plus à gauche, $@ s'étend jusqu'à la cible. Si vous essayez de faire $(build_dir)/foo (quoi qu'il en soit $(build_dir) est), Make traitera cette règle comme

$(build_dir)/foo: foo
    cp -f foo $(build_dir)/foo

La règle suivante,

$(build_dir):
    @if [ ! -x $(build_dir) ]; \
  then \
  mkdir $(build_dir); \
  fi

est pour $(build_dir) Elle est inutilement compliquée. Il est dit que "si $(build_dir) n'existe pas, alors mkdir", et il pourrait être écrit de cette façon :

$(build_dir):
    mkdir $@

Il semble que votre cible principale soit $(xpi_file) :

$(xpi_file): $(build_dir) $(xpi_built)

Donc Make va d'abord faire $(build_dir) (si nécessaire), puis les membres de la liste %(xpi_built) qui comprend quelques éléments de la forme $(build_dir)/% . Une fois que cela est fait, il exécutera les commandes de cette règle : il cd dans $(build_dir) de zipper certaines choses, et echo quelques messages.

0voto

Lukáš Lalinský Points 22537

Voir Règles relatives aux patrons y Variables automatiques dans la documentation de GNU Make. La première règle fait correspondre les fichiers à l'intérieur de $(build_dir) no $(build_dir) même. $< s'étend à la liste des conditions préalables de la règle en cours, $@ est la cible de la règle actuelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X