go build -ldflags "-X main.subversion=`date -u +.%Y%m%d.%H%M%S`"
在命令行中运行良好,
但是当将相同的标志添加到我的 go 构建配置 > Go 工具参数时,goland ide 失败了:
-ldflags "-X main.subversion=`date -u +.%Y%m%d.%H%M%S`"
似乎在转义双引号时遇到问题,但无法弄清楚我做错了什么。
--编辑:
在运行选项卡中我看到:
GOROOT=/usr/local/opt/go/libexec #gosetup
GOPATH=/Users/..../go #gosetup
/usr/local/opt/go/libexec/bin/go build -ldflags "-X main.subversion=$(date -u +.%Y%m%d.%H%M%S)" -o /Users/..../Downloads/ta_mac . #gosetup
invalid value "\"-X" for flag -ldflags: missing =<value> in <pattern>=<value>
usage: go build [-o output] [build flags] [packages]
Compilation finished with exit code 2
Run 'go help build' for details.
尽管如果我手动运行相同的命令,它会成功,并且应用程序会产生预期的行为,并为变量 subversion 提供正确的值。
/usr/local/opt/go/libexec/bin/go build -ldflags "-X main.subversion=$(date -u +.%Y%m%d.%H%M%S)" -o /Users/..../Downloads/ta_mac . #gosetup
---编辑2:
我正在探索使用
GOFLAGS="-ldflags=-X main.subversion=$(date -u +.%Y%m%d.%H%M%S)"
但到目前为止我遇到了类似的问题
---编辑3:
还有一个选项似乎是创建一个 makefile,但现在已经研究这个选项几个小时了,所以我会在研究这个选项之前暂停一下,这对于我需要做的事情来说可能过于复杂
---编辑4: jetbrains 建议在 Go 工具参数下使用此语法:
-ldflags "-X 'main.subversion=`date -u +.%Y%m%d.%H%M%S`'"
虽然这不会引发错误,但它也不会产生预期的行为:subversion 变量实际上被分配了字符串:
`date -u +.%Y%m%d.%H%M%S`
显然我希望成为这样的人
20231231.235959
我尝试了类似的替代方案但无济于事:
-ldflags "-X 'main.subversion=$(date -u +.%Y%m%d.%H%M%S)'"
-ldflags "-X 'main.subversion='$(date -u +.%Y%m%d.%H%M%S)"
-ldflags "-X 'main.subversion=`date -u +.%Y%m%d.%H%M%S`'"
-ldflags "-X 'main.subversion='`date -u +.%Y%m%d.%H%M%S`"
-ldflags "-X \"main.subversion=$(date -u +.%Y%m%d.%H%M%S)\""
-ldflags "-X \"main.subversion=\"$(date -u +.%Y%m%d.%H%M%S)"
-ldflags "-X \"main.subversion=`date -u +.%Y%m%d.%H%M%S`\""
-ldflags "-X \"main.subversion=\"`date -u +.%Y%m%d.%H%M%S`"
我猜你需要单引号而不是双引号。