首页 >后端开发 >Golang >如何在Makefile中转义表达式插值以正确执行命令?

如何在Makefile中转义表达式插值以正确执行命令?

Barbara Streisand
Barbara Streisand原创
2024-12-25 03:27:11550浏览

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

在 Makefile 中转义表达式插值

编写 Makefile 时,通常希望执行包含表达式的命令。一个常见的例子是在测试中,您可能希望根据某些条件有选择地运行测试。

假设您正在开发一个 Go 项目并希望从供应商目录中排除测试。您可以使用以下命令轻松地在命令行中执行此操作:

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

但是,当您尝试将其合并到 Makefile 中时:

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

.PHONY: test

您会注意到表达式不是interpolated:

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

要解决此问题,您需要使用第二个字符转义表达式中的“$”字符"$":

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

.PHONY: test

通过转义“$”,您指示 Makefile 将表达式解释为要执行的文字命令,而不是尝试替换变量。

以上是如何在Makefile中转义表达式插值以正确执行命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn