How to build Go executable with different output name?

How to build Golang executable with a different name other than the Golang package name?

1 Like

Just use this:

go build -o [your desired output executable name]

You can specify the executable name using the -o switch with

go build

If you want to switch to your source code directory and build on a single line you could do something like:

  cd $GOPATH/github.com/username/go-foobar && go build -o foobar`

From the Golang documentation, the full set of the build flags is as follows:

-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.

-race
Enable data race detection.
Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64, linux/ppc64le and linux/arm64 (only for 48-bit VMA).

-msan
Enable interoperation with memory sanitizer.
Supported only on linux/amd64, linux/arm64, and only with Clang/LLVM as the host C compiler.
On linux/arm64, pie build mode will be used.

-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 '[pattern=]arg 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 '[pattern=]arg list’
Arguments to pass on each gccgo compiler/linker invocation.

-gcflags '[pattern=]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 '[pattern=]arg list’
Arguments to pass on each go tool link invocation.

-linkshared
Build code that will be linked against shared libraries previously created with -buildmode=shared.

-mod mode
Module download mode to use: readonly, vendor, or mod.
See ‘go help modules’ for more.

-modcacherw
Leave newly-created directories in the module cache read-write instead of making them read-only.

-modfile file
In module aware mode, read (and possibly write) an alternate go.mod file instead of the one in the module root directory. A file named “go.mod” must still be present in order to determine the module root directory, but it is not accessed. When -modfile is specified, an alternate go.sum file is also used: its path is derived from the -modfile flag by trimming the “.mod” extension and appending “.sum”.

-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 comma-separated 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.

(Earlier versions of Go used a space-separated list, and that form is deprecated but still recognized.)

-trimpath
Remove all file system paths from the resulting executable.
Instead of absolute file system paths, the recorded file names will begin with either “go” (for the standard library), or a module [email protected] (when using modules), or a plain import path (when using GOPATH).

-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>’.

References:

2 Likes