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

老哥们, win10 下 Go 怎么编译

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

    目前会研究下 go generate 命令,最后感谢大家的帮助
    37 条回复    2021-03-30 11:23:22 +08:00
    zpfhbyx
        1
    zpfhbyx   244 天前
    docker ?
    cheneydog
        2
    cheneydog   244 天前
    goland + gomod
    ouyc
        3
    ouyc   244 天前 via Android
    我用了 grpc,有编译 .proto 文件的需求,所以想找一个在 win10 下执行脚本的,做好能跨平台
    @zpfhbyx 主要在开发时使用的能一键编译的
    @cheneydog 有用 gomod
    2379920898
        4
    2379920898   244 天前
    bee run 原生 就 go build
    zhengxiaowai
        5
    zhengxiaowai   244 天前
    go build ?????没懂楼主的意思。。
    交叉编译的话可以指定 GOARCH
    raaaaaar
        6
    raaaaaar   244 天前 via Android
    我也没懂,go build 不行吗?
    huobazi
        7
    huobazi   244 天前
    wsl 里玩呗
    ouyc
        8
    ouyc   244 天前
    @huobazi 真就 Linux 了,老哥们有没有用过 Win10 做个 Go 语言的开发
    XIU2
        9
    XIU2   244 天前
    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   244 天前
    makefile 中的命令 一条一条的在编辑器控制台执行
    noroot
        11
    noroot   244 天前
    make 是自动化构建工具,不是编译器。
    go 现在用 go mod 管理依赖,go build 执行构建。
    所以你的需求是什么?
    XIU2
        12
    XIU2   244 天前
    刚回复完就看到你刚发的附言。。。

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

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

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

    @ztechstack mingw 这个试了要从 / 找文件,windows 鬼来的 / 目录。如果把 / 这些目录配好,感觉还不如跑 wsl
    dongtingyue
        22
    dongtingyue   244 天前
    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   244 天前
    @2379920898 bee run 这是啥?
    @raaaaaar @thet 非 .go 文件不好用 go build,


    @zhengxiaowai 不是交叉编译,暂时还没研究
    ouyc
        24
    ouyc   244 天前
    @XIU2 需求是能跨平台、构建非 .go 文件。不太好写 .bat 脚本
    imjamespond2020
        25
    imjamespond2020   244 天前 via Android   ❤️ 1
    cmake 了解下?
    ljpCN
        26
    ljpCN   244 天前
    make for Windows
    jasonkayzk
        27
    jasonkayzk   244 天前   ❤️ 1
    “go 编译就用 go 自带的编译器;”

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

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

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

    总结:文不对题,不知所云;
    fenghuang
        28
    fenghuang   244 天前 via Android
    习惯写 shell 脚本,用 git 执行
    ouyc
        29
    ouyc   244 天前
    @fenghuang git bash 吗?目前没试过,在 GoLand 中你是怎么使用的,是配一个 git bash terminal 执行吗
    feelinglucky
        30
    feelinglucky   244 天前
    兄弟可以看下这个 https://taskfile.dev/
    fenghuang
        31
    fenghuang   244 天前 via Android
    @ouyc 是 git bash,goland 可以改成 git bash 终端
    neoblackcap
        32
    neoblackcap   244 天前
    本质上不就是跨平台构建嘛,搜构建工具一大把。cmake, xmake 都可以,无非就是看你自己喜欢写什么脚本。类 bazel 的都一大把,动手搜搜就好了。
    Reficul
        33
    Reficul   244 天前 via Android
    bee run 还行,真就是 beego 开发了咩。。
    还是直接 wls 写 shell 比较靠谱?
    2379920898
        34
    2379920898   243 天前
    beego 自带的一款自动编译工具。
    sxfscool
        35
    sxfscool   243 天前
    bee run 笑了
    CNife
        36
    CNife   243 天前
    其实 Windows 下是有 GNU Make 的,不嫌麻烦可以自己用 MinGW 编译一个,嫌麻烦可以用 scoop 装别人编译好的。
    如果 Makefile 里没有涉及 Linux/GNU 下的命令,直接就能运行,如果有的话建议直接上 MinGW 。
    abersheeran
        37
    abersheeran   243 天前
    powershell7 跨平台
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1023 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    ♥ Do have faith in what you're doing.