我正在尝试构建一个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"$
$
问题可能出在哪里?..根据我的知识,我给出了正确的标签位置..
答案 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)