Maison >développement back-end >Golang >Comment puis-je échapper à l'interpolation d'expression dans les Makefiles pour exécuter correctement les commandes ?

Comment puis-je échapper à l'interpolation d'expression dans les Makefiles pour exécuter correctement les commandes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 03:27:11546parcourir

How Do I Escape Expression Interpolation in Makefiles to Execute Commands Correctly?

Échapper à l'interpolation d'expression dans les Makefiles

Lors de l'écriture de Makefiles, il est courant de vouloir exécuter des commandes qui incorporent des expressions. Un exemple courant de ceci est celui des tests, où vous souhaiterez peut-être exécuter des tests de manière sélective en fonction de certains critères.

Supposons que vous travaillez sur un projet Go et que vous souhaitiez exclure les tests du répertoire des fournisseurs. Vous pouvez facilement le faire dans la ligne de commande en utilisant :

$ go test $(go list ./... | grep -v /vendor/)

Cependant, lorsque vous essayez de l'incorporer dans un Makefile :

test:
    go test $(go list ./... | grep -v /vendor/)

.PHONY: test

Vous remarquerez que l'expression n'est pas interpolé :

$ make
go test
?       github.com/m90/some-repo    [no test files]

Pour résoudre ce problème, vous devez échapper le caractère "$" dans l'expression à l'aide d'une seconde "$":

test:
    go test $$(go list ./... | grep -v /vendor/)

.PHONY: test

En échappant le "$", vous demandez au Makefile d'interpréter l'expression comme une commande littérale à exécuter, plutôt que d'essayer de remplacer la variable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn