[short] skip # Compiler name is always added. go build go version -m m$GOEXE stdout '^\tbuild\t-compiler=gc$' stdout '^\tbuild\tGOOS=' stdout '^\tbuild\tGOARCH=' [amd64] stdout '^\tbuild\tGOAMD64=' ! stdout asmflags|gcflags|ldflags|gccgoflags # Toolchain flags are added if present. # The raw flags are included, with package patterns if specified. go build -asmflags=example.com/m=-D=FOO=bar go version -m m$GOEXE stdout '^\tbuild\t-asmflags=example\.com/m=-D=FOO=bar$' go build -gcflags=example.com/m=-N go version -m m$GOEXE stdout '^\tbuild\t-gcflags=example\.com/m=-N$' go build -ldflags=example.com/m=-w go version -m m$GOEXE stdout '^\tbuild\t-ldflags=example\.com/m=-w$' # gccgoflags are not added when gc is used, and vice versa. # TODO: test gccgo. go build -gccgoflags=all=UNUSED go version -m m$GOEXE ! stdout gccgoflags # Build and tool tags are added but not release tags. # "race" is included with build tags but not "cgo". go build -tags=a,b go version -m m$GOEXE stdout '^\tbuild\t-tags=a,b$' [race] go build -race [race] go version -m m$GOEXE [race] ! stdout '^\tbuild\t-tags=' [race] stdout '^\tbuild\t-race=true$' # CGO flags are separate settings. # CGO_ENABLED is always present. # Other flags are added if CGO_ENABLED is true. env CGO_ENABLED=0 go build go version -m m$GOEXE stdout '^\tbuild\tCGO_ENABLED=0$' ! stdout CGO_CPPFLAGS|CGO_CFLAGS|CGO_CXXFLAGS|CGO_LDFLAGS [cgo] env CGO_ENABLED=1 [cgo] env CGO_CPPFLAGS=-DFROM_CPPFLAGS=1 [cgo] env CGO_CFLAGS=-DFROM_CFLAGS=1 [cgo] env CGO_CXXFLAGS=-DFROM_CXXFLAGS=1 [cgo] env CGO_LDFLAGS=-L/extra/dir/does/not/exist [cgo] go build [cgo] go version -m m$GOEXE [cgo] stdout '^\tbuild\tCGO_ENABLED=1$' [cgo] stdout '^\tbuild\tCGO_CPPFLAGS=-DFROM_CPPFLAGS=1$' [cgo] stdout '^\tbuild\tCGO_CFLAGS=-DFROM_CFLAGS=1$' [cgo] stdout '^\tbuild\tCGO_CXXFLAGS=-DFROM_CXXFLAGS=1$' [cgo] stdout '^\tbuild\tCGO_LDFLAGS=-L/extra/dir/does/not/exist$' -- go.mod -- module example.com/m go 1.18 -- m.go -- package main func main() {}