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

老哥们, win10 下 Go 怎么编译

  •  
  •   ouyc · 2021-03-29 16:33:48 +08:00 via Android · 3516 次点击
    这是一个创建于 547 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 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
    zpfhbyx
        1
    zpfhbyx  
       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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2887 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:06 · PVG 22:06 · LAX 07:06 · JFK 10:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.