首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >go build构建什么?(go build vs. install)

go build构建什么?(go build vs. install)
EN

Stack Overflow用户
提问于 2015-06-03 14:39:22
回答 1查看 85.9K关注 0票数 135

新的Go程序员通常不知道或搞不懂基本的go build命令是做什么的。

go buildgo install命令究竟构建什么,它们将结果/输出放在哪里?

EN

回答 1

Stack Overflow用户

发布于 2017-11-04 18:46:10

对于包:

go build:构建包,然后丢弃结果

多亏了CL 68116CL 75473,在Go 1.10 (Q1 2018)之后,这就不是真的了。请参阅我在此处引用的this thread

go buildgo install命令到底做什么每当go工具安装一个软件包或二进制文件时,它也会安装它的任何依赖项,所以运行go install也会自动安装你的程序所依赖的软件包(公开可用的,"go gettable“软件包)。

实际上..。除了新的缓存之外,go install还将在Go 1.10中发生变化:

"go install“命令不再安装命名包 (CL 75850)的依赖项。

如果您运行"**go install foo**",,则只安装了foo. 在此之前,情况有所不同。如果依赖项过期,"go install“还会安装任何依赖项。

在"go install“期间隐式安装依赖项给用户带来了很多困惑和头疼,但在此之前必须启用增量构建。

不再是了。

我们认为,新的"install what I said“语义将更容易理解,特别是从bug报告中可以清楚地看出,许多用户已经预期到了它们。

通过类比"go build -i“和"go test -i”,在"**go install**",期间强制安装依赖项的使用新的"**go install -i**",。

"go install“用于安装任何重新构建的依赖项,这一事实通常与-a (意为"force rebuild of all dependencies”)一起使用时会引起混淆。

现在,"go install -a myprog“将强制完全重建myprog的所有依赖项,以及myprog本身,但只会安装myprog。(当然,所有重新构建的依赖项仍将保存在构建缓存中。)

与新的基于内容的陈旧分析一起使用时,让这种情况更容易理解是特别重要的,因为它看到了比以前更频繁地重新构建依赖关系的充分理由,这将增加“为什么安装我的依赖关系”的困惑。

例如,如果您运行"go install -gcflags=-N myprog",它将安装一个在没有编译器优化的情况下构建的myprog,但它也不再重新安装myprog在没有编译器优化的情况下从标准库使用的包。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30612611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档