Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何仅将参数值传递给Makefile目标? 我来自NoDEJS世界,所以我认为MaFrm文件是NPM 包中的“脚本”部分。JSON,这可能是错误的(或不是?)。_Go_Makefile - Fatal编程技术网

Go 如何仅将参数值传递给Makefile目标? 我来自NoDEJS世界,所以我认为MaFrm文件是NPM 包中的“脚本”部分。JSON,这可能是错误的(或不是?)。

Go 如何仅将参数值传递给Makefile目标? 我来自NoDEJS世界,所以我认为MaFrm文件是NPM 包中的“脚本”部分。JSON,这可能是错误的(或不是?)。,go,makefile,Go,Makefile,因此,我的想法是在安装新的依赖项时,通过键入以下内容自动执行重复操作: make install github.com/stretchr/testify 并找到一种方法来获取github.com/stretchr/authentic参数,而不必使用通常建议的重参数名称值声明FOO=bar(=>make install DEP=github.com/stretchr/authentic) 所以,下面,我尝试了这个: install %: go get $* godep save

因此,我的想法是在安装新的依赖项时,通过键入以下内容自动执行重复操作:

make install github.com/stretchr/testify
并找到一种方法来获取
github.com/stretchr/authentic
参数,而不必使用通常建议的重参数名称值声明
FOO=bar
(=>
make install DEP=github.com/stretchr/authentic

所以,下面,我尝试了这个:

install %:
    go get $*
    godep save ./...
    git add Godeps vendor
    git commit -m "godep: add $*"
但是没有成功:它在没有任何参数的情况下运行
go-get
,并且
git-commit-m“godep:add”

试验

1-当我这样做时:

install %:
    echo $*
install %:
    go get ${*}
我看到我的“github.com/stretchr/authorize”

2-当我这样做时:

install %:
    echo $*
install %:
    go get ${*}
它循环两次,首先运行
go-get
,不带任何参数,然后运行
go-get-github.com/stretchr/authentice
(根据需要)


它看起来像是
${*}
表示一个在目标之后解析字符组的参数的“数组”,第一个是
install
github.com/stretchr/autifest
之间的空格,第二个是
github.com/stretchr/autifest
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仅仅是为了实现这一点可能有点过头了。它不仅仅是一种脚本语言。

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仅仅是为了实现这一点可能有点过头了。它不仅仅是一种脚本语言。

您不能在同一规则中使用显式目标和模式,因此您的规则
%install:
将不起作用

您可以使用GNU make来实现这一点,但它非常粗糙且容易出错,我不推荐使用它

ARG := $(filter-out install,$(MAKECMDGOALS))

install:
        go get $(ARG)
        godep save ./...
        git add Godeps vendor
        git commit -m "godep: add $(ARG)"
如您所见,您需要为没有其他参数或存在多个其他参数的情况添加处理,当然,如果不将目标放入
筛选列表中,您就无法添加更多目标,等等

只是。。。这不是一个好办法

你为什么不这样做呢:

install-%:
        go get $*
        godep save ./...
        git add Godeps vendor
        git commit -m "godep: add $*"
然后运行:

make install-github.com/stretchr/testify

您不能在同一规则中使用显式目标和模式,因此您的规则
%install:
将不起作用

您可以使用GNU make来实现这一点,但它非常粗糙且容易出错,我不推荐使用它

ARG := $(filter-out install,$(MAKECMDGOALS))

install:
        go get $(ARG)
        godep save ./...
        git add Godeps vendor
        git commit -m "godep: add $(ARG)"
如您所见,您需要为没有其他参数或存在多个其他参数的情况添加处理,当然,如果不将目标放入
筛选列表中,您就无法添加更多目标,等等

只是。。。这不是一个好办法

你为什么不这样做呢:

install-%:
        go get $*
        godep save ./...
        git add Godeps vendor
        git commit -m "godep: add $*"
然后运行:

make install-github.com/stretchr/testify

这是不可能的。非变量定义的参数被解释为Makefile目标。我建议改为使用shell脚本,然后您可以说,
/install github.com/…
实际上我觉得这是不可能的。我会这样做。非常感谢。只是@JanKrüger的一个子问题:在Makefile中声明shell脚本并解析原始参数应该是可能的,是吗?据我所知,
make
的常见实现不允许您以任何方式访问原始参数
make
根本不是为这种事情而设计的。你必须有一个旧版本的GNU make。该语法在一段时间内是非法的,后来又被重新添加,但由于Linux内核makefiles存在一些历史问题,因此发出了警告。你对“数组”的看法不正确。发生的情况是,该规则正在运行多次,对于您在命令行上指定的每个目标运行一次。每次运行时,自动变量
$*
都会被适当设置。阅读手册很有帮助:这是不可能的。非变量定义的参数被解释为Makefile目标。我建议改为使用shell脚本,然后您可以说,
/install github.com/…
实际上我觉得这是不可能的。我会这样做。非常感谢。只是@JanKrüger的一个子问题:在Makefile中声明shell脚本并解析原始参数应该是可能的,是吗?据我所知,
make
的常见实现不允许您以任何方式访问原始参数
make
根本不是为这种事情而设计的。你必须有一个旧版本的GNU make。该语法在一段时间内是非法的,后来又被重新添加,但由于Linux内核makefiles存在一些历史问题,因此发出了警告。你对“数组”的看法不正确。发生的情况是,该规则正在运行多次,对于您在命令行上指定的每个目标运行一次。每次运行时,自动变量
$*
都会被适当设置。阅读手册很有帮助:我很清楚Makefile中的参数name-value参数,正如我在说明中所说;)这样做的目的是避免使用arg name部分,因为其他一些“任务自动机”可以这样做我们的想法是避免使用arg name部分,因为其他一些“任务自动机”可以这样做。除非我错了,否则我开始认为目标实际上是一种在
make
之后解析所有内容的正则表达式,是吗?在接受您的答案之前,我只需要尝试其他方法。这是一种模式规则:这是一种隐式规则:它们与正则表达式无关。除非我错了,否则我开始认为目标实际上是一种在
make
之后解析所有内容的正则表达式,是吗?在接受你的回答之前,我只需要试一下别的。那是私人助理