Files

112 lines
4.2 KiB
Makefile

# Makefile - ROS2 项目构建 / 测试 / 启动聚合命令
#
# 设计思想:
# - 用 make 聚合所有 colcon / docker / 测试命令
# - 跨平台: Linux/macOS 直接 make;Windows 用 WSL 或 Git Bash
# - 默认项目: docker compose -p ros2
#
# 使用:
# make help # 列出所有命令
# make build # build 镜像
# make up # 启动容器
# make down # 停止容器
# make colcon-build # 容器内 build 所有包
# make colcon-test # 容器内跑所有测试
# make launch TOPIC=pubsub
# make logs
# make shell
# ---------- 配置 ----------
DOCKER_COMPOSE = docker compose -p ros2 -f docker/docker-compose.yml
CONTAINER = ros2_dev
WORKSPACE = /root/ros2_ws
PACKAGES = py_pubsub cpp_pubsub py_srv py_action_demo cpp_robot_tf2 py_vision_demo \
py_params cpp_custom_interface py_lifecycle_composable cpp_qos_demo py_overlay_dds \
bringup
# ---------- 颜色 ----------
GREEN = \033[0;32m
YELLOW = \033[1;33m
RESET = \033[0m
.DEFAULT_GOAL := help
.PHONY: help
help: ## 显示所有命令
@echo "$(GREEN)ROS2 Learning Suite - Makefile$(RESET)"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
# ---------- Docker ----------
.PHONY: build
build: ## 构建镜像(首次 5-10min)
$(DOCKER_COMPOSE) build
.PHONY: up
up: ## 启动容器(后台)
$(DOCKER_COMPOSE) up -d
.PHONY: down
down: ## 停止容器
$(DOCKER_COMPOSE) down
.PHONY: logs
logs: ## 查看容器日志
$(DOCKER_COMPOSE) logs -f ros2
.PHONY: shell
shell: ## 进入容器开发终端
$(DOCKER_COMPOSE) exec ros2 bash -lc "source $(WORKSPACE)/install/setup.bash && exec bash"
.PHONY: clean
clean: ## 清理构建产物(build/install/log)
$(DOCKER_COMPOSE) exec ros2 bash -lc "cd $(WORKSPACE) && rm -rf build/ install/ log/"
# ---------- colcon ----------
.PHONY: colcon-build
colcon-build: ## 容器内 build 所有包
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon build --symlink-install --packages-select $(PACKAGES)"
.PHONY: colcon-test
colcon-test: ## 容器内跑所有包的测试
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon test --packages-select $(PACKAGES)"
.PHONY: colcon-build-one
colcon-build-one: ## build 单包: make colcon-build-one PKG=py_pubsub
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon build --symlink-install --packages-select $(PKG)"
.PHONY: colcon-test-one
colcon-test-one: ## 测单包: make colcon-test-one PKG=py_pubsub
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon test --packages-select $(PKG)"
# ---------- Launch (端到端 demo) ----------
.PHONY: launch
launch: ## 启动 launch: make launch NAME=pubsub_launch
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source $(WORKSPACE)/install/setup.bash && ros2 launch bringup $(NAME).py"
.PHONY: full-demo
full-demo: ## 启动 11 节点 full_demo
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source $(WORKSPACE)/install/setup.bash && ros2 launch bringup full_demo_launch.py"
# ---------- venv (本机开发) ----------
.PHONY: venv-setup
venv-setup: ## 本机创建 Python venv(不污染系统 Python)
powershell -ExecutionPolicy Bypass -File tools/setup_venv.ps1
.PHONY: venv-activate
venv-activate: ## 提示如何激活 venv
@echo "运行: powershell -ExecutionPolicy Bypass -File tools/setup_venv.ps1"
@echo "然后: .\\.venv\\Scripts\\Activate.ps1"
# ---------- 维护 ----------
.PHONY: lint
lint: ## 容器内跑 ruff + flake8(代码风格)
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && ruff check src/ || true"
.PHONY: format
format: ## 容器内跑 black(代码格式化)
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && black src/ || true"
.PHONY: status
status: ## 显示所有节点 / topic / service / action
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "source $(WORKSPACE)/install/setup.bash && ros2 node list && ros2 topic list && ros2 service list && ros2 action list"