我编写了以下Makefile,用于构建适用于不同平台的 Golang 代码。(我的操作系统是 Windows 10,通过命令提示符运行 Makefile)
当我运行
GOCMD = go
GOBUILD = $(GOCMD) build
GOFILES = $(wildcard *.go)
SONG_PATH = ./song-service
SONG_PATH_OUTPOUT = ./song-service/cmd
SONG_BINARY_NAME_LIN = songservice_lin
song-build-lin:
set GOOS=linux
set GOARCH=amd64
$(GOBUILD) -o "$(SONG_PATH_OUTPOUT)/$(SONG_BINARY_NAME_LIN)" -v "$(SONG_PATH)/$(GOFILES)"
当我运行
make song-build-lin
时,它没有错误地运行,但GOOS变量未设置。
但是,当我直接在命令提示符中运行set GOOS = linux
时,它可以工作!
song-build-lin
中的每个命令都在单独的子 shell 中执行。在每行末尾添加分号;
和反斜杠\\
将多个命令组合到一个子 shell 中。 - ifnotakset GOOS=linux;\ set GOARCH=amd64;\
,但仍然无法工作! - Vahid Jafarienv
,例如env GOOS=linux GOARCH=amd64 $(GOBUILD)...
- Adrian