使用 make 交叉编译跨平台应用
2022-05-17
该make文件用于通过设置特定环境变量和目标操作系统,使用make交叉编译跨平台的应用程序。
make 文件内容
BUILD_ENV := CGO_ENABLED=0
BUILD=`date +%FT%T%z`
LDFLAGS=-ldflags "-w -s -X main.Version=${VERSION} -X main.Build=${BUILD}"
TARGET_EXEC=test
.PHONY: all clean setup build-linux build-osx build-windows
all: clean setup build-linux build-osx build-windows
clean:
rm -rf build
setup:
mkdir -p build/linux
mkdir -p build/osx
mkdir -p build/windows
build-linux: setup
${BUILD_ENV} GOARCH=amd64 GOOS=linux go build ${LDFLAGS} -o build/linux/${TARGET_EXEC}
build-osx: setup
${BUILD_ENV} GOARCH=amd64 GOOS=darwin go build ${LDFLAGS} -o build/osx/${TARGET_EXEC}
build-windows: setup
${BUILD_ENV} GOARCH=amd64 GOOS=windows go build ${LDFLAGS} -o build/windows/${TARGET_EXEC}.exe
.PHONY
其作用是声明 build / clean / tool / lint / help 为伪目标
,
声明为伪目标会怎么样
呢?
- 声明为伪目标后:在执行对应的命令时,make 就
不会去检查
是否存在 build / clean / tool / lint / help 其对应的文件
,而是每次都会运行标签对应的命令
若不声明
:恰好存在对应的文件,则 make 将会认为 xx 文件已存在,没有重新构建的必要了
LDFLAGS中参数
-w: 选项用于抹除DWARF符号表,
-s: 选项用于抹除符号表和调试信息。更多细节详见参考一。
-X: 环境变量