安装Go二进制文件的名称

17

go build 命令可以使用 -o 命令行选项指定二进制文件的名称。 go install 命令则不能指定二进制文件名称,但它可以安装二进制文件并缓存包编译结果。

如何使用 go install 更改二进制文件名或者如何使用 go build 缓存编译结果?

简单的答案是“使用正确的包名称运行 go install”,但是请问,我错过了哪个选项?

4个回答

12
你可以使用-i标记进行构建:

-i标记会安装目标依赖的软件包。

go build -i -o binary packagename


go build -i -o .... 的问题在于,当你使用 go install 时,需要已经克隆了仓库,而 go install 会为你下载所有内容。 - S.R
5
从 Go 1.16 开始,go build 命令中的 -i 标志已被废弃。 - Gabriel

3

我们可以运行以下命令以生成具有所需名称和路径的二进制可执行文件:

  1. 如果您希望下载并安装dep,则可以选择执行以下命令:

    go install

  2. 构建二进制文件并指定路径和名称:

    go build -o path/binary_name

示例:go build -o ~/go/bin/mybinaryname


3
当你输入go help install时,你会得到以下内容:
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.

允许的构建标志仅有:

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

-i-o标志不能在install命令中使用,只能在build命令中使用。

现在,我所看到的改变Go安装二进制文件名称的唯一选项是手动执行mv oldnamebinary newnamebinary。至少,在GO 1.6中是这种行为,也许在未来的版本中会有所改变。


-2
在GO 1.6+中,您可以将主文件重命名为任何您想要的名称。
例如:
mv main.go myApp.go
然后只需运行
go install myApp.go

您的myApp已准备好执行,并且位置位于$GOROOT/bin中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接