- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
gobuild命令应用详解
-a:强行对所有涉及到的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。|
-n|打印编译期间所用到的其它命令,但是并不真正执行它们。|
-pn|指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在`darwin/arm`平台(即iPhone和iPad所用的平台)下,该数量默认是`1`。|
-race|开启竞态条件的检测。不过此标记目前仅在`linux/amd64`、`freebsd/amd64`、`darwin/amd64`和`windows/amd64`平台下受到支持。|
-v|打印出那些被编译的代码包的名字。|
-work|打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。|
-x打印编译期间所用到的其它命令。注意它与-n标记的区别。
下面我们就用其中几个标记来查看一下在构建代码包logging时创建的临时工作目录的路径:
hc@ubt:~/golang/goc2p/src$gobuild-v-worklogging
WORK=/tmp/go-build888760008
logging
上面命令的结果输出的第一行是为了编译logging包,Go创建的一个临时工作目录,这个目录被创建到了Linux的临时目录下。输出的第二行是对标记-v的响应。这意味着此次命令执行时仅编译了logging包。关于临时工作目录的用途和内容,我们会在讲解gorun命令和gotest命令的时候详细说明。
现在我们再来看看如果强制重新编译会涉及到哪些代码包:
hc@ubt:~/golang/goc2p/src$gobuild-a-v-worklogging
WORK=/tmp/go-build929017331
runtime
errors
sync/atomic
math
unicode/utf8
unicode
sync
io
syscall
strings
time
strconv
reflect
os
fmt
log
logging
怎么会多编译了这么多代码包呢?可以确定的是,代码包logging中的代码直接依赖了标准库中的runtime包、strings包、fmt包和log包。那么其他的代码包为什么也会被重新编译呢?
从代码包编译的角度来说,如果代码包A依赖代码包B,则称代码包B是代码包A的依赖代码包(以下简称依赖包),代码包A是代码包B的触发代码包(以下简称触发包)。
标记-pn可以限制编译过程中任务执行的并发数量,n默认为当前计算机的CPU逻辑核数。如果在执行gobuild命令时加入标记-p1,那么就可以保证代码包编译顺序严格按照预先设定好的优先级进行。现在我们再来编译logging包:
hc@ubt:~/golang/goc2p/src$gobuild-a-v-work-p1logging
WORK=/tmp/go-build114039681
runtime
errors
sync/atomic
sync
io
math
syscall
time
os
unicode/utf8
strconv
reflect
fmt
log
unicode
strings
logging
我们可以认为,以上示例中所显示的代码包的顺序,就是logging包直接或间接依赖的代码包按照优先级从高到低排列后的排序。
另外,如果在命令中加入标记-n,那么编译程序只会输出所用到的命令而不会真正运行。在这种情况下,编译过程不会使用并发模式。
在本节的最后,我们对一些并不太常用的标记进行简要的说明:
-asmflags
此标记可以后跟另外一些标记,如-D、-I、-S等。这些后跟的标记用于控制Go语言编译器编译汇编语言文件时的行为。
-buildmode
此标记用于指定编译模式,使用方式如-buildmode=default(这等同于默认情况下的设置)。此标记支持的编译模式目前有6种。借此,我们可以控制编译器在编译完成后生成静态链接库(即.a文件,也就是我们之前说的归档文件)、动态链接库(即.so文件)或/和可执行文件(在Windows下是.exe文件)。
-compiler
此标记用于指定当前使用的编译器的名称。其值可以为gc或gccgo。其中,gc编译器即为Go语言自带的编辑器,而gccgo编译器则为GCC提供的Go语言编译器。而GCC则是GNU项目出品的编译器套件。GNU是一个众所周知的自由软件项目。在开源软件界不应该有人不知道它。好吧,如果你确实不知道它,赶紧去google吧。
-gccgoflags
此标记用于指定
您可能关注的文档
- C#编程的实用指南.docx
- fortran代码转python实践技巧.docx
- IT项目经理考核指标.docx
- 2024年ABS市场运行回顾与2025年展望 -新世纪.pdf
- 化工行业2024年信用回顾与2025年展望 -新世纪.pdf
- 拼多多_+电商研究系列(二):拼多多深度报告:低价优势深厚,组织效率驱动“超级速度”出海.pdf
- 中国煤炭行业展望,2025年1月.pdf
- 个人住房抵押贷款不良资产支持证券回收观察系列(四):资产处置难度有所增加,回款仍以处置完毕资产为主,且回收率保持较高水平 202501 -中诚信.pdf
- 数据资产入表一周年(下篇):实践现状与资本化案例观察 -新世纪.pdf
- 通信管线作业安全生产操作规范v1.pdf
文档评论(0)