Was macht go install?

75

Die Dokumente sagen nichts darüber aus, was buildvs installtut

Meine Erwartung war, dass es so ist make install; dh es nimmt das kompilierte Zeug und legt es an seinem endgültigen Ort ab ( /usr/local/bin/my_new_toyoder was auch immer), aber es scheint, dass es Dinge hineinstecktGOROOT/bin

Kann ich sagen, gehen, um etwas zu tun make install- dh Dinge woanders hinstellen? Oder schreibe ich einfach ein Makefile (bitte sag mir nein)?

pm100
quelle

Antworten:

39

Wenn Binärdateien an einen bestimmten Speicherort verschoben werden sollen, können Sie die Umgebungsvariable verwenden GOBIN:

Das Verzeichnis bin / enthält kompilierte Befehle. Jeder Befehl wird nach seinem Quellverzeichnis benannt, aber nur nach dem letzten Element, nicht nach dem gesamten Pfad. Das heißt, der Befehl mit der Quelle in DIR / src / foo / quux wird in DIR / bin / quux installiert, nicht in DIR / bin / foo / quux. Das foo / wird entfernt, damit Sie DIR / bin zu Ihrem PATH hinzufügen können, um zu den installierten Befehlen zu gelangen. Wenn die Umgebungsvariable GOBIN festgelegt ist, werden Befehle in dem Verzeichnis installiert, das sie anstelle von DIR / bin benennt.

Quelle: http://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOBIN=/usr/local/bin/ go install

Wenn Sie ein Projektverzeichnis wünschen bin/, können Sie einfach Ihren Projektpfad an anhängen. GOPATHSie müssen jedoch Ihren Code unter haben $project-path/src/und go installalle Binärdateien einfügen $project-path/bin.

export GOPATH=/dir1:/dir2:/dir3

Wenn GOBIN nicht festgelegt ist, landen Binärdateien aus / dir1 / src in / dir1 / bin, Binärdateien aus / dir2 / src in / dir2 / bin usw. (und Binärdateien aus $ GOROOT / src in $ GOROOT) /Behälter).

Quelle: https://groups.google.com/forum/#!topic/golang-nuts/-mN8R_Fx-7M

Und Sie können auch einfach verwenden (danke JimB):

go build -o /path/binary-name
OneOfOne
quelle
7
Sie können den Ausgabedateinamen auch direkt mitgo build -o
JimB
Ja, das werde ich auch der Vollständigkeit halber zur Antwort hinzufügen.
OneOfOne
Also ist go install dasselbe wie go build -o $ GOPATH / bin / <Paket>?
pm100
1
Mehr oder weniger installierte es auch Bibliotheksdateien ( blah.a) zu $GOPATH/pkg/.
OneOfOne
47

go build vs. go install:

go buildKompilieren Sie einfach die ausführbare Datei und verschieben Sie sie an das Ziel. go installmach ein bisschen mehr. Die ausführbare Datei wird in $GOPATH/binalle Nicht- Hauptpakete verschoben und zwischengespeichert, in die importiert wurde $GOPATH/pkg. Der Cache wird bei der nächsten Kompilierung verwendet, wenn er noch nicht geändert wurde.


Ein Paketbaum nach go buildund go install:

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

Detailliertere Informationen .

Benyamin Jafari
quelle
1
Baut go installauch? Oder muss ich go buildvor der Installation ausgeführt werden?
Rafael Eyng
2
@ RafaelEyng Nein, go installist genug, aber seine Exec-Datei erstellt im bin/Verzeichnis
Benyamin Jafari