Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Go Install Binary name

Tags:

makefile

go

go build allow to precise binary name with the -o command line option. go install doesn't, but it deploy the binary and cache package compilation.

How to either change the binary name with go install? or cache compilation with go build?

A simple answer would be "use go install with correct package name", but please, where is the option I am missing?

like image 207
Bactisme Avatar asked May 26 '16 10:05

Bactisme


3 Answers

You can use the -i flag to go build:

The -i flag installs the packages that are dependencies of the target.

go build -i -o binary packagename

like image 193
JimB Avatar answered Nov 15 '22 16:11

JimB


When you type go help install you get

usage: go install [build flags] [packages]

Install compiles and installs the packages named by the import paths,
along with their dependencies.

For more about the build flags, see 'go help build'.
For more about specifying packages, see 'go help packages'.

See also: go build, go get, go clean.

The only build flags allowed are

   -a
            force rebuilding of packages that are already up-to-date.
    -n
            print the commands but do not run them.
    -p n
            the number of programs, such as build commands or
            test binaries, that can be run in parallel.
            The default is the number of CPUs available, except
            on darwin/arm which defaults to 1.
    -race
            enable data race detection.
            Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
    -msan
            enable interoperation with memory sanitizer.
            Supported only on linux/amd64,
            and only with Clang/LLVM as the host C compiler.
    -v
            print the names of packages as they are compiled.
    -work
            print the name of the temporary work directory and
            do not delete it when exiting.
    -x
            print the commands.

    -asmflags 'flag list'
            arguments to pass on each go tool asm invocation.
    -buildmode mode
            build mode to use. See 'go help buildmode' for more.
    -compiler name
            name of compiler to use, as in runtime.Compiler (gccgo or gc).
    -gccgoflags 'arg list'
            arguments to pass on each gccgo compiler/linker invocation.
    -gcflags 'arg list'
            arguments to pass on each go tool compile invocation.
    -installsuffix suffix
            a suffix to use in the name of the package installation directory,
            in order to keep output separate from default builds.
            If using the -race flag, the install suffix is automatically set to race
            or, if set explicitly, has _race appended to it.  Likewise for the -msan
            flag.  Using a -buildmode option that requires non-default compile flags
            has a similar effect.
    -ldflags 'flag list'
            arguments to pass on each go tool link invocation.
    -linkshared
            link against shared libraries previously created with
            -buildmode=shared.
    -pkgdir dir
            install and load all packages from dir instead of the usual locations.
            For example, when building with a non-standard configuration,
            use -pkgdir to keep generated packages in a separate location.
    -tags 'tag list'
            a list of build tags to consider satisfied during the build.
            For more information about build tags, see the description of
            build constraints in the documentation for the go/build package.
    -toolexec 'cmd args'
            a program to use to invoke toolchain programs like vet and asm.
            For example, instead of running asm, the go command will run
            'cmd args /path/to/asm <arguments for asm>'.

Where -i and -o flags are no possible to install command and are available to build command only.

Now, The only option that I see to change the name of the Go install binary name is manually mv oldnamebinary newnamebinary. At least, this behaviour is in GO 1.6, maybe on coming releases can change.

like image 37
Carlos Andrés García Avatar answered Nov 15 '22 15:11

Carlos Andrés García


we can run below commands to generate binary executable with the desired name and path:

  1. optional if you want dep to be downloaded and installed

    go install

  2. to build the binary at path and name desired:

    go build -o path/binary_name

example: go build -o ~/go/bin/mybinaryname

like image 25
Dean Jain Avatar answered Nov 15 '22 16:11

Dean Jain