É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!