如何在 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

go build和go install的区别

Go -- 如何使用gcore工具获取一个core文件而不重启应用?

go build说明

go build 命令

在编译时使用shell变量值和“go build”命令[重复]