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

时间:2017-05-24 19:45:03

标签: go makefile

我试图编写一个超级简单的Makefile来在Go项目中运行测试。该项目的依赖项是出售的,但我想跳过这些测试。从命令行运行时,我只需执行

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

然而,当我把它变成这样的Makefile时:

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

.PHONY: test

不会评估表达式:

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

如何让shell以类似shell的方式插入表达式?

2 个答案:

答案 0 :(得分:3)

在Makefile配方部分中,您需要使用第二个$使用$转义:

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

.PHONY: test

答案 1 :(得分:2)

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

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

.PHONY: test

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