beego / bee

Bee is a tool for helping develop with beego app framework.
Apache License 2.0
1.44k stars 920 forks source link

bee pack -ba="-ldflags "-X "”两个引号问题 #812

Open barryzxy opened 2 years ago

barryzxy commented 2 years ago

在执行一下命令是,有两个双引号,出现-X不识别问题 bee pack -be GOOS=windows -be GOARCH=amd64 -ba="-ldflags "-X 'main.BuildTime=$today' -X 'main.Version=$version'"" -a tmaiapp 以下是提醒

Z:\gowork\go1.17.4\pkg\tool\windows_amd64\link.exe: -X flag requires argument of the form importpath.name=value 2021/12/07 17:47:06 FATAL ▶ 0004 exit status 2

wangqianwei commented 1 year ago

有人可以处理这个问题么

flycash commented 1 year ago

你可以看看 bee pack 命令是怎么处理的,我觉得近期没时间处理这个

wangqianwei commented 1 year ago

修改前的代码

        //// pack.go 506行
        args := []string{"build", "-o", binPath}
        if len(buildArgs) > 0 {
            args = append(args, strings.Fields(buildArgs)...)
        }

        if verbose {
            fmt.Fprintf(output, "\t%s%s+ go %s%s%s\n", "\x1b[32m", "\x1b[1m", strings.Join(args, " "), "\x1b[21m", "\x1b[0m")
        }

        execmd := exec.Command("go", args...)

可以做如下调整

        //// pack.go 506行
        var execmd *exec.Cmd
        buildCmdStr := "go build -o " + binPath + " " + buildArgs
        if runtime.GOOS == "windows" {
            execmd   = exec.Command("cmd", "/C", buildCmdStr)
        } else {
            execmd = exec.Command("/bin/bash", "-c", buildCmdStr)
        }

        if verbose {
            fmt.Fprintf(output, "\t%s%s+ %s%s%s\n", "\x1b[32m", "\x1b[1m", buildCmdStr, "\x1b[21m", "\x1b[0m")
        }

问题原因是因为buildArgs参数不能直接使用strings.Fields函数简单的通过空格来分割参数,并直接作为打包命令的参数来使用。buildArgs参数中的ldflags参数本身就带有多个空格。所以打包一定会存在问题。最小的改动就是直接拼接一下可执行的大打包命令。

flycash commented 1 year ago

可以直接发一个合并请求吗?