在Makefile中设置环境变量时使用@前缀的含义是什么?

13

这是我到目前为止得到的:

SPECS = $(shell find spec -iname "*_spec.js")

spec:
    @NODE_ENV=test \
    @NODE_PATH=lib \
    ./node_modules/.bin/expresso \
    $(TESTFLAGS) \
    $(SPECS)

cov:
    @TESTFLAGS=--cov $(MAKE) spec

.PHONY: spec cov

输出:/bin/sh: @NODE_PATH=lib: 找不到命令

如果我只设置一个变量,它就正常工作。我做错了什么?

1个回答

15

只使用 '@' 一次。字符串仅在开头需要它一次,但你写了两次。行继续符号是很字面意思的,你现有的代码读作:

@NODE_ENV=test @NODE_PATH=lib ./node_modules/.bin/expresso $(TESTFLAGS) $(SPECS)

NODE_PATH上的 '@' 将被传递到shell中,这不是你想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接