Makefile:21:***食谱在第一个目标之前开始。停止

时间:2018-01-30 15:57:10

标签: makefile

我正在尝试构建一个make文件来从快照遥测加载插件...当我尝试使用命令sudo make build时,它显示Makefile:21: *** recipe commences before first target. Stop.此错误....在make文件中我添加了

export GOROOT=/usr/local/go
export GOPATH=/home/intel/Downloads/snap-tele/gopath
export PATH=$PATH:/usr/local/go/bin:/home/intel/Downloads/snap-tele/gopath/src/github.com/Masterminds/glide
echo $PATH

我的make文件如下所示cat -e -t -v Makefile其中^我显示标签空间而$代表行尾

^Iexport GOROOT=/usr/local/go$
^Iexport GOPATH=/home/intel/Downloads/snap-tele/gopath$
^Iexport PATH=$PATH:/usr/local/go/bin:/home/intel/Downloads/snap-tele/gopath/src/github.com/Masterminds/glide$
^Iecho $PATH$
$
default:$
^I$(MAKE) deps$
^I$(MAKE) all$
deps:$
^Ibash -c "./scripts/deps.sh"$
test:$
^Ibash -c "./scripts/test.sh $(TEST_TYPE)"$
test-legacy:$
^Ibash -c "./scripts/test.sh legacy"$
test-small:$
^Ibash -c "./scripts/test.sh small"$
test-medium:$
^Ibash -c "./scripts/test.sh medium"$
test-large:$
^Ibash -c "./scripts/test.sh large"$
test-all:$
^I$(MAKE) test-small$
^I$(MAKE) test-medium$
^I$(MAKE) test-large$
check:$
^I$(MAKE) test$
all:$
^Ibash -c "./scripts/build.sh"$
$

问题可能出在哪里?..根据我的知识,我给出了正确的标签位置..

1 个答案:

答案 0 :(得分:1)

一些事项:首先,让我们期望目标/配方的形式为:

target: [deps...]
<tab> recipe 1
<tab> recipe 2

当且仅当目标需要重建时,它才会运行食谱。您没有指定目标,但您确实指定了以制表符(食谱)开头的行。 Make抱怨你没有目标的食谱(应该如此)。

然而,话虽如此,看起来并不像您希望您的线条作为配方的一部分运行(它无论如何都不会起作用,因为导出的变量不会从一个配方线记忆到另一个配方线,更不用说目标了。)

您可能想要这样做:

export GOROOT=/usr/local/go
export GOPATH=/home/intel/Downloads/snap-tele/gopath
export PATH:=${PATH}:/usr/local/go/bin:/home/intel/Downloads/snap-tele/gopath/src/github.com/Masterminds/glide
$(info PATH=${PATH})

没有任何前面的标签。缺少制表符意味着make会将命令解释为make解析阶段中makefile解释器的一部分。请注意echo是一个shell命令,make使其无法理解,因此我将其替换为等同的make $(info ... )

修改:抱歉,我错过了对$PATH的访问权限 - 制作会将其解释为$P,然后是文字ATH。在这种情况下,您应该使用${PATH}。您还应该使用:=代替=来避免递归分配(请参阅https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_6.html#SEC59