【问题标题】:How to specify the CFLAGS parameter in go build command line instead of in the go source file?如何在 go build 命令行而不是在 go 源文件中指定 CFLAGS 参数?
【发布时间】: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 命令行中定义它?

【问题讨论】:

    标签: go cgo


    【解决方案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 环境变量添加到派生的标志中 从这些指令。包特定的标志应该使用 指令,而不是环境变量,以便构建工作 未修改的环境。从环境变量获得的标志是 不受上述安全限制。

    【讨论】:

    • 成功了,非常感谢。
    猜你喜欢
    • 2019-07-13
    • 2017-02-10
    • 1970-01-01
    • 2014-02-16
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多