我的Makefile为什么不在命令中插入表达式

m90*_*m90 3 makefile go

我正在尝试编写一个超级简单的文件Makefile来在Go项目中运行测试。项目的依赖项已供应,但我想跳过这些测试。从命令行运行时,我只是做

$ go test $(go list ./... | grep -v /vendor/)
Run Code Online (Sandbox Code Playgroud)

但是,当我把它变成Makefile这样的时候:

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

.PHONY: test
Run Code Online (Sandbox Code Playgroud)

该表达式将不被评估:

$ make
go test 
?       github.com/m90/some-repo    [no test files]
Run Code Online (Sandbox Code Playgroud)

我如何获得make以类似于shell的方式插值表达式?

eus*_*h77 6

根据具体情况,在使用shell函数扩展配方期间评估命令可能更有用:

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

.PHONY: test
Run Code Online (Sandbox Code Playgroud)

这将使包名称成为配方的一部分,并且在执行时通常会打印子命令的结果。


m90*_*m90 5

在Makefile配方部分中,您将需要使用escape $使用第二个$

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

.PHONY: test
Run Code Online (Sandbox Code Playgroud)

  • 没错,但这不是二级扩展。它转义了特殊字符。 (2认同)