我来自NodeJS世界,所以我认为Makefile是npm package.json中的“脚本”部分,这可能是错误的(或者不是?)要做到这一点。
因此,我的想法是在安装新依赖项时自动执行重复操作,方法是键入:
make install github.com/stretchr/testify并找到一种方法来获得github.com/stretchr/testify参数,而无需使用通常建议的繁重的参数名值声明FOO=bar (=> make install DEP=github.com/stretchr/testify)。
所以,在this answer之后,我尝试了一下:
install %:
go get $*
godep save ./...
git add Godeps vendor
git commit -m "godep: add $*"但没有成功:它运行没有任何参数和git commit -m "godep: add"的go get。
试用版
1 -当我这样做的时候:
install %:
echo $*我看到我的“github.com/stretchr/指证”。
当我这样做时,2 -:
install %:
go get ${*}它循环两次,首先不带任何参数地运行go get,然后运行go get github.com/stretchr/testify (如您所愿)。
看起来${*}代表了一个参数的“数组”,解析目标后的字符组,第一个是install和github.com/stretchr/testify之间的空格,第二个是github.com/stretchr/testify。
发布于 2018-06-10 08:31:30
您不能在同一规则中使用显式目标和模式,因此您的规则% install:将不起作用。
你可以通过使用the CMDGOALS variable的GNU make来做到这一点,但是它非常黑客,容易出错,所以我不推荐你这么做。
ARG := $(filter-out install,$(MAKECMDGOALS))
install:
go get $(ARG)
godep save ./...
git add Godeps vendor
git commit -m "godep: add $(ARG)"正如你所看到的,对于没有其他参数的情况,或者有多个其他参数的情况,你需要添加处理,当然,如果不把它们放到filter-out列表中,你就不能添加更多的目标,等等。
只是..。我想这不是一个好办法。
你为什么不这样做呢?
install-%:
go get $*
godep save ./...
git add Godeps vendor
git commit -m "godep: add $*"然后运行:
make install-github.com/stretchr/testify发布于 2018-06-09 22:03:15
Make变量可能可以做你想做的事情:
host> cat Makefile
install:
go get $(P)
godep save ./...
git add Godeps vendor
git commit -m "godep: add $(P)"
host> make install P=github.com/stretchr/testify但是仅仅使用make来实现这一点可能有些夸张。它不仅仅是一种脚本语言。
https://stackoverflow.com/questions/50774666
复制相似问题