如何在 go build 命令行而不是在 go 源文件中指定 CFLAGS 参数?
Posted
技术标签:
【中文标题】如何在 go build 命令行而不是在 go 源文件中指定 CFLAGS 参数?【英文标题】:How to specify the CFLAGS parameter in go build command line instead of in the go source file? 【发布时间】:2022-01-21 11:50:17 【问题描述】:例如 go 文件中的 MY_NUM:
//#cgo CFLAGS: -DMY_NUM=3
/*
int multiple(int x)
return x * MY_NUM;
*/
import "C"
....
但我会经常更改 MY_NUM 的值。所以我想在构建命令中更改它。
如何在go build
命令行中定义它?
【问题讨论】:
【参考方案1】:它不完全是 go build
选项,但您可以使用 CGO_CFLAGS
环境变量,例如:
$ cat foo.go
package main
/*
int multiple(int x)
return x * MY_NUM;
*/
import "C"
import "fmt"
func main()
fmt.Println(C.multiple(2))
$ CGO_CFLAGS="-DMY_NUM=10" go build foo.go
$ ./foo
20
$
来自https://pkg.go.dev/cmd/cgo
构建时,CGO_CFLAGS、CGO_CPPFLAGS、CGO_CXXFLAGS、CGO_FFLAGS 并将 CGO_LDFLAGS 环境变量添加到派生的标志中 从这些指令。包特定的标志应该使用 指令,而不是环境变量,以便构建工作 未修改的环境。从环境变量获得的标志是 不受上述安全限制。
【讨论】:
成功了,非常感谢。以上是关于如何在 go build 命令行而不是在 go 源文件中指定 CFLAGS 参数?的主要内容,如果未能解决你的问题,请参考以下文章
go的三个运行基本命令的区别,go run ,go build 和 go install