【发布时间】:2017-07-23 02:54:35
【问题描述】:
如果未设置GOPATH,则无法编译go 程序。但是很多go 项目是使用Makefiles 构建的,因为go 也缺少提取git 修订、设置版本等功能。所以应该可以从Makefile 中自动检测GOPATH。
假设我为go get -d手动设置了一次GOPATH:
go get -d github.com/zyedidia/micro/cmd/micro
现在,如果我打开另一个会话,cd 进入 github.com/zyedidia/micro/cmd/micro 并执行 make build,则构建失败:
...
cmd/micro/micro.go:20:2: cannot find package "layeh.com/gopher-luar" in any of:
/usr/lib/go-1.7/src/layeh.com/gopher-luar (from $GOROOT)
($GOPATH not set)
Makefile:15: recipe for target 'build' failed
make: *** [build] Error 1
那么,如果GOPATH没有设置,我该如何从Makefile设置,并确保此时有go环境呢?
这不起作用:
GOPATH ?= ../../../..
更新:以下代码有效,但未检测到父目录包含src、bin 和pkg 目录。
export GOPATH ?= $(abspath $(dir ../../../../..))
需要export将make变量转换为环境变量,?=设置make变量只有它没有设置,abspath和dir在这里描述:
【问题讨论】: