# Makefile for pt_system_checking # 支持 amd64 和 arm64 架构的交叉编译 # 项目名称 PROJECT_NAME = pt_system_checking VERSION = 0.1.0 # 构建目录 BUILD_DIR = target RELEASE_DIR = release # 目标架构 ARCH_AMD64 = x86_64-unknown-linux-musl ARCH_ARM64 = aarch64-unknown-linux-gnu # 输出二进制文件名 BINARY_AMD64 = $(PROJECT_NAME)-amd64 BINARY_ARM64 = $(PROJECT_NAME)-arm64 .PHONY: all help install-targets build-amd64 build-arm64 build-all clean release test prepare-release create-release # 默认目标 all: build-all # 帮助信息 help: @echo "可用的构建目标:" @echo " make install-targets - 安装交叉编译工具链" @echo " make build-amd64 - 构建 amd64 版本" @echo " make build-arm64 - 构建 arm64 版本(适用于香橙派 Zero3)" @echo " make build-all - 构建所有架构版本" @echo " make release - 创建发布版本(优化编译)" @echo " make prepare-release - 准备发布文件(包含安装脚本)" @echo " make create-release - 创建 Gitea Release(需要设置 VERSION 变量)" @echo " make test - 运行测试" @echo " make clean - 清理构建文件" @echo " make install - 安装到系统(需要 root 权限)" # 安装交叉编译目标 install-targets: @echo "安装交叉编译工具链..." rustup target add $(ARCH_AMD64) rustup target add $(ARCH_ARM64) @echo "" @echo "请确保已安装 ARM64 交叉编译工具:" @echo " Ubuntu/Debian: sudo apt-get install gcc-aarch64-linux-gnu" @echo " Fedora/RHEL: sudo dnf install gcc-aarch64-linux-gnu" @echo " Arch Linux: sudo pacman -S aarch64-linux-gnu-gcc" @echo "" @if ! command -v aarch64-linux-gnu-gcc >/dev/null 2>&1; then \ echo "警告: 未检测到 aarch64-linux-gnu-gcc,ARM64 交叉编译可能失败"; \ echo "请运行: sudo apt-get install gcc-aarch64-linux-gnu"; \ else \ echo "✓ 检测到 aarch64-linux-gnu-gcc"; \ fi @echo "工具链安装完成" # 构建 amd64 版本 build-amd64: @echo "构建 amd64 版本..." cargo build --target $(ARCH_AMD64) @mkdir -p $(RELEASE_DIR) @cp $(BUILD_DIR)/$(ARCH_AMD64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64) @echo "amd64 版本构建完成: $(RELEASE_DIR)/$(BINARY_AMD64)" # 构建 arm64 版本(适用于香橙派 Zero3) build-arm64: @echo "构建 arm64 版本(适用于香橙派 Zero3)..." cargo build --target $(ARCH_ARM64) @mkdir -p $(RELEASE_DIR) @cp $(BUILD_DIR)/$(ARCH_ARM64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64) @echo "arm64 版本构建完成: $(RELEASE_DIR)/$(BINARY_ARM64)" # 构建所有架构 build-all: build-amd64 build-arm64 @echo "所有架构构建完成" # 发布版本(优化编译) release: @echo "构建优化版本..." @mkdir -p $(RELEASE_DIR) cargo build --release --target $(ARCH_AMD64) cargo build --release --target $(ARCH_ARM64) @cp $(BUILD_DIR)/$(ARCH_AMD64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64) @cp $(BUILD_DIR)/$(ARCH_ARM64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64) @echo "发布版本构建完成:" @ls -lh $(RELEASE_DIR)/ # 运行测试 test: cargo test # 清理构建文件 clean: cargo clean rm -rf $(RELEASE_DIR) @echo "清理完成" # 准备发布文件(包含二进制文件和安装脚本) prepare-release: release @echo "准备发布文件..." @cp install.sh $(RELEASE_DIR)/ @chmod +x $(RELEASE_DIR)/install.sh @echo "发布文件已准备完成,位于 $(RELEASE_DIR)/ 目录" @echo "请将以下文件上传到 Gitea Releases:" @ls -lh $(RELEASE_DIR)/ # 创建 Gitea Release create-release: prepare-release @echo "创建 Gitea Release v$(VERSION)..." tea releases create --tag v$(VERSION) --title "V$(VERSION) 版本发布" \ --asset "$(RELEASE_DIR)/install.sh" \ --asset "$(RELEASE_DIR)/$(BINARY_AMD64)" \ --asset "$(RELEASE_DIR)/$(BINARY_ARM64)" @echo "Release 创建完成" # 安装到系统(默认安装当前架构) install: cargo install --path . @echo "安装完成"