7 votes

Syntaxe des Makefile : qu'est-ce que $(RM) ?

J'ai vu le Makefile suivant en ligne ( aquí ) :

hello:

clean:
    $(RM) hello

Quand il y a un fichier hello.c dans le même répertoire que le Makefile, make dans le Terminal construit hello exécutable. Lorsque make clean est exécuté, hello L'exécutable est supprimé par rm -f hello à la place. Donc, $(RM) hello signifie rm -f hello ici.

  • Que signifie $(FOO) ? Est-ce une syntaxe spéciale de Makefile, ou une commande bash ?
  • Puis-je exécuter d'autres commandes en plus de $(RM), comme $(PWD) ?

6voto

Jens Points 17702

$(RM) est une référence à une variable de type "make" (ou macro dans le jargon POSIX). Il existe deux types de syntaxe, avec une sémantique identique : $(NAME) et ${NAME} (et il existe des macros d'une lettre qui ne nécessitent pas de parenthèses, telles que $a ).

POSIX spécifie de nombreuses variables, errrrr, macros pour avoir un défaut :

MAKE=make
AR=ar
ARFLAGS=-rv
YACC=yacc
YFLAGS=
LEX=lex
LFLAGS=
LDFLAGS=
CC=c99
CFLAGS=-O 1
FC=fort77
FFLAGS=-O 1
GET=get
GFLAGS=
SCCSFLAGS=
SCCSGETFLAGS=-s

C'est intéressant, RM n'en fait pas partie. La valeur par défaut de l'option RM dans votre implémentation de make est apparemment rm -f (et votre make fonctionne en mode non-POSIX par défaut).

Notez que si $(PWD) a la même syntaxe qu'une substitution de commande shell (et ${PWD} la même chose qu'un paramètre shell), ce sont des choses complètement différentes. Pour répondre à votre question, non, vous ne pouvez pas vous attendre à ce que $(PWD) comme une macro "make" pour exécuter le pwd ou développer dans le répertoire de travail actuel. Une macro indéfinie sera développée en une chaîne vide sans que "make" n'ait à sourciller.

6voto

Danh Points 4923

C'est une variable du Makefile. Il y a une variable explicite (qui est définie dans le Makefile) ou une variable implicite (définie par make, qui peut être remplacée par vous).

La liste des variables implicites peut être trouvée par :

make -p

certaines des variables les plus courantes peuvent être trouvées à l'adresse suivante : 10.3 Variables utilisées par les règles implicites

Vous pouvez étendre la variable en $(NAME) ou ${NAME}

1voto

kabanus Points 11398

C'est un fichier make variable . Auparavant ou dans votre env vous avez RM="rm -f" selon le shell ou si c'est dans le make lui-même, et maintenant vous exécutez simplement.

Vous pouvez exécuter pwd mais pour utiliser $(PWD) vous devez définir PWD="pwd" .

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