Makefile - Directives

Il existe de nombreuses directives disponibles sous diverses formes. lemakeprogramme sur votre système peut ne pas prendre en charge toutes les directives. Veuillez donc vérifier si votremake soutient les directives que nous expliquons ici. GNU make soutient ces directives.

Directives conditionnelles

Les directives conditionnelles sont -

  • le ifeqdirective commence le conditionnel et spécifie la condition. Il contient deux arguments, séparés par une virgule et entourés de parenthèses. La substitution de variable est effectuée sur les deux arguments, puis ils sont comparés. Les lignes du makefile suivant l'ifeq sont respectées si les deux arguments correspondent; sinon, ils sont ignorés.

  • le ifneqdirective commence le conditionnel et spécifie la condition. Il contient deux arguments, séparés par une virgule et entourés de parenthèses. La substitution de variable est effectuée sur les deux arguments, puis ils sont comparés. Les lignes du makefile suivant l'ifneq sont respectées si les deux arguments ne correspondent pas; sinon, ils sont ignorés.

  • le ifdefdirective commence le conditionnel et spécifie la condition. Il contient un seul argument. Si l'argument donné est vrai, la condition devient vraie.

  • le ifndefdirective commence le conditionnel et spécifie la condition. Il contient un seul argument. Si l'argument donné est faux, la condition devient vraie.

  • le elsedirective entraîne le respect des lignes suivantes si la condition précédente a échoué. Dans l'exemple ci-dessus, cela signifie que la deuxième commande de liaison alternative est utilisée chaque fois que la première alternative n'est pas utilisée. Il est facultatif d'avoir un else dans un conditionnel.

  • le endifdirective met fin au conditionnel. Chaque conditionnel doit se terminer par un endif.

Syntaxe des directives conditionnelles

La syntaxe d'un conditionnel simple sans autre est la suivante -

conditional-directive
   text-if-true
endif

Le text-if-true peut être n'importe quelle ligne de texte, à considérer comme faisant partie du makefile si la condition est vraie. Si la condition est fausse, aucun texte n'est utilisé à la place.

La syntaxe d'un conditionnel complexe est la suivante -

conditional-directive
   text-if-true
else
   text-if-false
endif

Si la condition est vraie, text-if-true est utilisé; sinon, text-if-false est utilisé. Le text-if-false peut être n'importe quel nombre de lignes de texte.

La syntaxe de la directive conditionnelle est la même que le conditionnel soit simple ou complexe. Il existe quatre directives différentes qui testent diverses conditions. Ils sont comme donnés -

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

Les directives opposées des conditions ci-dessus sont les suivantes -

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

Exemple de directives conditionnelles

libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
   $(CC) -o foo $(objects) $(libs_for_gcc)
else
   $(CC) -o foo $(objects) $(normal_libs)
endif

La directive inclure

le include directive permet makepour suspendre la lecture du makefile courant et lire un ou plusieurs autres makefiles avant de continuer. La directive est une ligne dans le makefile qui ressemble à -

include filenames...

Les noms de fichiers peuvent contenir des modèles de noms de fichiers shell. Les espaces supplémentaires sont autorisés et ignorés au début de la ligne, mais une tabulation n'est pas autorisée. Par exemple, si vous avez trois fichiers `.mk ', à savoir,` a.mk', `b.mk ', et` c.mk', et $ (bar) alors il se développe pour bish bash, puis ce qui suit expression.

include foo *.mk $(bar)

is equivalent to:

include foo a.mk b.mk c.mk bish bash

Quand le maketraite une directive d'inclusion, il suspend la lecture du makefile et lit tour à tour chaque fichier répertorié. Quand c'est fini,make reprend la lecture du makefile dans lequel la directive apparaît.

La directive dérogatoire

Si une variable a été définie avec un argument de commande, les affectations ordinaires dans le makefile sont ignorées. Si vous voulez définir la variable dans le makefile même si elle a été définie avec un argument de commande, vous pouvez utiliser une directive de substitution, qui est une ligne qui ressemble à la suite -

override variable = value

or

override variable := value