老哥们, win10 下 Go 怎么编译 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ouyc
V2EX    Go 编程语言

老哥们, win10 下 Go 怎么编译

  •  
  •   ouyc 2021-03-29 16:33:48 +08:00 via Android 4781 次点击
    这是一个创建于 1658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Linux 上用了 make 编译,不知道 win10 有没有类似的比较流行的。排除 maven 、gradle 、ant 这些要 Java 的。最好只要 Go 的
    第 1 条附言    2021-03-29 17:11:40 +08:00
    我就是想在 win10 上使用类似 make 这种编译工具,有没有推荐的
    第 2 条附言    2021-03-29 17:29:04 +08:00
    gomod 有包管理功能,但对于第三方文件例如 .proto 文件要手动执行命令编译出来。在 Linux 上时就用 make 来调用命令编译,现在转 Win10 平台上了,有没有可以调用命令行进行文件处理的。希望大家推荐 Win10 上开发 Go 语言的编译工具
    第 3 条附言    2021-03-29 18:42:28 +08:00
    主要是想找一个构建工具,能针对非 .go 文件进行处理,go build 不能处理非 .go 文件吧。能跨平台,因此排除掉 .bat 。

    目前会研究下 go generate 命令,最后感谢大家的帮助
    37 条回复    2021-03-30 11:23:22 +08:00
    justseemore
        1
    justseemore  
       2021-03-29 16:36:02 +08:00
    docker ?
    cheneydog
        2
    cheneydog  
       2021-03-29 16:38:35 +08:00
    goland + gomod
    ouyc
        3
    ouyc  
    OP
       2021-03-29 16:47:47 +08:00 via Android
    我用了 grpc,有编译 .proto 文件的需求,所以想找一个在 win10 下执行脚本的,做好能跨平台
    @zpfhbyx 主要在开发时使用的能一键编译的
    @cheneydog 有用 gomod
    2379920898
        4
    2379920898  
       2021-03-29 17:05:46 +08:00
    bee run 原生 就 go build
    zhengxiaowai
        5
    zhengxiaowai  
       2021-03-29 17:11:57 +08:00
    go build ?????没懂楼主的意思。。
    交叉编译的话可以指定 GOARCH
    raaaaaar
        6
    raaaaaar  
       2021-03-29 17:13:23 +08:00 via Android
    我也没懂,go build 不行吗?
    huobazi
        7
    huobazi  
       2021-03-29 17:14:57 +08:00
    wsl 里玩呗
    ouyc
        8
    ouyc  
    OP
       2021-03-29 17:30:09 +08:00
    @huobazi 真就 Linux 了,老哥们有没有用过 Win10 做个 Go 语言的开发
    XIU2
        9
    XIU2  
       2021-03-29 17:30:35 +08:00
    Golang ?我都是直接写个简单的 bat 脚本,自动配置临时环境变量来编译不同平台 /系统的二进制版本。

    脚本内容示例(只写了两个,其他平台 /系统同理):

    @echo off
    set version=v1.0.0
    cd ..

    echo "ABC_linux_386..."
    SET CGO_ENABLED=0
    SET GOOS=linux
    SET GOARCH=386
    go build -o Releases\ABC_linux_386 -ldflags "-s -w -X main.version=%version%"

    echo "ABC_windows_amd64..."
    SET CGO_ENABLED=0
    SET GOOS=windows
    SET GOARCH=amd64
    go build -o Releases\ABC_windows_amd64.exe -ldflags "-s -w -X main.version=%version%"

    如果是文件夹的话,再搭配一个自动压缩包的脚本就行了(或者合并到一个脚本中)。

    脚本中的 main.version=%version% 是编译时写入版本号,可以删除。
    selfeasy
        10
    selfeasy  
       2021-03-29 17:33:27 +08:00
    makefile 中的命令 一条一条的在编辑器控制台执行
    noroot
        11
    noroot  
       2021-03-29 17:37:13 +08:00
    make 是自动化构建工具,不是编译器。
    go 现在用 go mod 管理依赖,go build 执行构建。
    所以你的需求是什么?
    XIU2
        12
    XIU2  
       2021-03-29 17:38:57 +08:00
    刚回复完就看到你刚发的附言。。。

    我只是业余自学自给自足写一些小软件,没折腾过依赖多的项目,所以你的需求我也不懂~
    Jirajine
        13
    Jirajine  
       2021-03-29 17:39:55 +08:00 via Android
    go 本身的工具链比较完善,make 也就用来方便一下多平台构建、定义常量等情况,所以 Windows 下继续使用 make 也完全没问题。
    thevita
        14
    thevita  
       2021-03-29 17:40:17 +08:00
    你需要的是 `go generate`
    JackyCDK
        15
    JackyCDK  
       2021-03-29 17:41:35 +08:00
    使用 wsl2 (混乱邪恶
    thevita
        16
    thevita  
       2021-03-29 17:41:58 +08:00
    硬要用 make 的话, ms 的工具链里有 nmake, 不过要单独安装
    BeautifulSoap
        17
    BeautifulSoap  
       2021-03-29 17:42:00 +08:00
    lz 你这个需求,不是很复杂的话,为什么不考虑使用 go generate 呢?

    如果需求复杂的话其实还不如用 docker,因为你同时维护两个平台的 makefile 是非常耗费心智的

    当然,一定想在 windows 下用 make 的话,其实方法也很多,但是核心还是在于,不同平台你的的编译指令会有区别,到头来你还是会回到上面说的维护两个平台各自的 makefile 上了
    HanMeiM
        18
    HanMeiM  
       2021-03-29 17:52:59 +08:00
    我也没懂,意思是 go 在 windows 上还不能直接跑 go build ?
    zliea
        19
    zliea  
       2021-03-29 18:15:19 +08:00
    cygwin/mingw ?
    thet
        20
    thet  
       2021-03-29 18:31:49 +08:00
    go build
    ouyc
        21
    ouyc  
    OP
       2021-03-29 18:31:50 +08:00
    @BeautifulSoap @thevita 可以,研究下这个。

    @ztechstack mingw 这个试了要从 / 找文件,windows 鬼来的 / 目录。如果把 / 这些目录配好,感觉还不如跑 wsl
    dongtingyue
        22
    dongtingyue  
       2021-03-29 18:32:35 +08:00
    go get -u github.com/golang/protobuf/protoc-gen-go
    export PATH=$PATH:$GOPATH/bin
    protoc -I routeguide/ user.proto --go_out=plugins=grpc:routeguide
    运行命令后会在 routeguide 目录下生成 user.pb.go 文件
    -I 指定导入目录可以指定多次
    ouyc
        23
    ouyc  
    OP
       2021-03-29 18:35:24 +08:00
    @2379920898 bee run 这是啥?
    @raaaaaar @thet 非 .go 文件不好用 go build,


    @zhengxiaowai 不是交叉编译,暂时还没研究
    ouyc
        24
    ouyc  
    OP
       2021-03-29 18:37:36 +08:00
    @XIU2 需求是能跨平台、构建非 .go 文件。不太好写 .bat 脚本
    imjamespond2020
        25
    imjamespond2020  
       2021-03-29 18:48:56 +08:00 via Android   1
    cmake 了解下?
    ljpCN
        26
    ljpCN  
       2021-03-29 18:51:09 +08:00
    make for Windows
    jasonkayzk
        27
    jasonkayzk  
       2021-03-29 19:00:01 +08:00   1
    “go 编译就用 go 自带的编译器;”

    想用 make 就下 cygwin 或者 mingw 自己配置 path ;
    windows 下有自己的 nmake,通过 Visual Studio 下载即可;
    想要在 windows 下编译 proto 文件,可以下载 win 平台对应的插件或者自己编译加 path ;

    使用 make 和你是不是 go 、以及 Go 怎么编译没有必然联系;

    想了解 Go 怎么编译,可以去看《编译原理》,从生成 AST 开始学习;

    总结:文不对题,不知所云;
    fenghuang
        28
    fenghuang  
       2021-03-29 19:12:36 +08:00 via Android
    习惯写 shell 脚本,用 git 执行
    ouyc
        29
    ouyc  
    OP
       2021-03-29 19:21:12 +08:00
    @fenghuang git bash 吗?目前没试过,在 GoLand 中你是怎么使用的,是配一个 git bash terminal 执行吗
    feelinglucky
        30
    feelinglucky  
       2021-03-29 19:35:24 +08:00
    兄弟可以看下这个 https://taskfile.dev/
    fenghuang
        31
    fenghuang  
       2021-03-29 19:37:34 +08:00 via Android
    @ouyc 是 git bash,goland 可以改成 git bash 终端
    neoblackcap
        32
    neoblackcap  
       2021-03-29 20:11:30 +08:00
    本质上不就是跨平台构建嘛,搜构建工具一大把。cmake, xmake 都可以,无非就是看你自己喜欢写什么脚本。类 bazel 的都一大把,动手搜搜就好了。
    Reficul
        33
    Reficul  
       2021-03-30 00:27:50 +08:00 via Android
    bee run 还行,真就是 beego 开发了咩。。
    还是直接 wls 写 shell 比较靠谱?
    2379920898
        34
    2379920898  
       2021-03-30 08:48:15 +08:00
    beego 自带的一款自动编译工具。
    sxfscool
        35
    sxfscool  
       2021-03-30 08:51:58 +08:00
    bee run 笑了
    CNife
        36
    CNife  
       2021-03-30 09:40:27 +08:00
    其实 Windows 下是有 GNU Make 的,不嫌麻烦可以自己用 MinGW 编译一个,嫌麻烦可以用 scoop 装别人编译好的。
    如果 Makefile 里没有涉及 Linux/GNU 下的命令,直接就能运行,如果有的话建议直接上 MinGW 。
    abersheeran
        37
    abersheeran  
       2021-03-30 11:23:22 +08:00
    powershell7 跨平台
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3537 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 20ms UTC 05:01 PVG 13:01 LAX 22:01 JFK 01:01
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86