Що робить go install?


79

У документах нічого не сказано про те, що buildпротиinstall робить

Я сподівався, що це як make install; тобто він бере зібраний матеріал і розміщує його в остаточному місці ( /usr/local/bin/my_new_toyабо що завгодно), але здається, що він поміщає речіGOROOT/bin

Чи можу я сказати піти робити make install- тобто покласти речі в інше місце? Або я просто пишу файл make-файлів (скажіть, будь ласка, ні)?

Відповіді:


42

Якщо ви хочете, щоб двійкові файли переходили до певного місця, ви можете використовувати змінну середовища 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 не встановлено, двійкові файли з / dir1 / src потрапляють в / dir1 / bin, двійкові файли з / dir2 / src потрапляють в / dir2 / bin тощо (а двійкові файли з $ GOROOT / src закінчуються в $ GOROOT / bin).

Джерело: https://groups.google.com/forum/#!topic/golang-nuts/-mN8R_Fx-7M

І ви також можете просто використовувати (дякую JimB):

go build -o /path/binary-name

7
Ви також можете вказати ім'я вихідного файлу безпосередньо за допомогоюgo build -o
JimB

Так, це теж, додаю це до відповіді заради повноти.
OneOfOne

отже, go install - це те саме, що go build -o $ GOPATH / bin / <package>?
pm100

1
Більш-менш, він також встановив бібліотечні файли ( blah.a) до $GOPATH/pkg/.
OneOfOne

49

go build проти go install:

go buildпросто компілює виконуваний файл і переміщує його до місця призначення. go installробить трохи більше. Він переміщує виконуваний файл $GOPATH/binта кешує всі не основні пакунки, до яких імпортується $GOPATH/pkg. Кеш-пам’ять буде використано під час наступної компіляції за умови, що джерело ще не змінилося.


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

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

Більш детальна інформація .


2
Має go installтакож будує? Або мені потрібно запустити go buildперед встановленням?
Рафаель Айнг,

2
@RafaelEyng Ні, go installдосить, але його файл exec створюється в bin/каталозі
Бенямін Джафарі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.