Что делает установка?

Документы ничего не говорят о том, что build vs install делает

Я ожидал, что он похож на make install; то есть он берет скомпилированный материал и помещает его в конечное местоположение (/usr/local/bin/my_new_toy или что-то еще), но кажется, что он помещает вещи в GOROOT/bin

Могу ли я сказать, чтобы сделать make install - то есть положить вещи в другое место? Или я просто пишу makefile (пожалуйста, скажите мне нет)?

Ответы

Ответ 1

Если вы хотите, чтобы двоичные файлы переходили в определенное место, вы можете использовать переменную окружения GOBIN:

В каталоге bin/содержатся скомпилированные команды. Каждая команда имеет имя для его исходный каталог, но только конечный элемент, а не весь путь. То есть команда с источником в DIR/src/foo/quux устанавливается в DIR/bin/quux, а не DIR/bin/foo/quux. Foo/разделяется так, что вы можете добавить DIR/bin в PATH, чтобы получить установленные команды. Если Переменная среды GOBIN установлена, команды установлены на он вместо имени DIR/bin указывает имена.

Источник: http://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOBIN=/usr/local/bin/ go install

Если вам нужен каталог проекта bin/, тогда вы можете просто добавить свой путь к проекту GOPATH, однако у вас должен быть код под $project-path/src/ и go install будет помещать все двоичные файлы в $project-path/bin.

export GOPATH=/dir1:/dir2:/dir3

Если GOBIN не установлен, двоичные файлы из /dir 1/src заканчиваются в /dir 1/bin, двоичные файлы из /dir 2/src заканчиваются в /dir 2/bin и т.д. (и двоичные файлы из $GOROOT/src в $GOROOT/bin).

Источник: https://groups.google.com/forum/#!topic/golang-nuts/-mN8R_Fx-7M

И это полностью перешло мне на ум, но вы всегда можете просто использовать (спасибо JimB):

go build -o /path/binary-name

Ответ 2

go build vs go install:

go build просто скомпилировать исполняемый файл и переместить его в место назначения. go install сделать немного больше. Он перемещает исполняемый файл в $GOPATH/bin и $GOPATH/bin все неосновные пакеты, импортированные в $GOPATH/pkg. Кеш будет использоваться в следующей компиляции, если он еще не изменен.


Дерево пакетов после go build и go install:

.
├── bin
│   └── hello  # by go install
└── src 
    └── hello
        ├── hello  # by go build
        └── hello.go

Более полная ссылка.