Go 编译过程分析(一) -- 编译脚本

本文探讨了Go语言的编译过程,重点分析了src目录下的编译脚本,如all.bash和make.bash。文章指出,Go的编译主要由dist工具控制,该工具在不同平台上使用不同脚本调用。作者认为dist的设计增加了编译系统的复杂性,并建议改进。此外,还介绍了影响Go编译的各种环境变量,如GOROOT_FINAL、GOARCH和GOOS等。
摘要由CSDN通过智能技术生成

    go 语言最近很火,与时俱进,我也看了看go 的语法。

    看起来 go 还是不错的,有很多新的feature。 就下载了代码研究了一下。

    go 的 src 目录下面存在三套编译文件:

  1. window 平台, 所有 bat 文件
  2. plan9 平台,所有 rc 文件
  3. unix 类平台,所有bash 文件

     以 unix 编译文件为例, go 的编译入口时在 src/all.bash , 这是一个bash 脚步, 这个脚步只是简单的调用了 make.bash 在脚步结束之后,调用 dist banner 输出编译的信息。 

set -e
if [ ! -f make.bash ]; then
        echo 'all.bash must be run from $GOROOT/src' 1>&2
        exit 1
fi
OLDPATH="$PATH"
. ./make.bash "$@" --no-banner
bash run.bash --no-rebuild
PATH="$OLDPATH"
$GOTOOLDIR/dist banner  # print build info

    dist 是在 make.bash 中生成的一个可执行文件,go 的所有编译都是在这个文件的控制下完成的。 个人认为这并不是一个好的设计,导致维护编译系统的成功过高,如果要修改一下编译选项,往往要修改 dist 源代码。dist 的代码在目录: /src/cmd/dist 下。

  dist 这个命令行程序支持如下几个参数:   

   "banner         print installation banner\n" ; 打印安装的一些信息
   "bootstrap      rebuild everything\n"        ; 重新编译所有的 go 代码
   "clean          deletes all built files\n"   ; 清楚编译的 go 代码
   "env [-p]       print environment (-p: include $PATH)\n"  ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值