112 lines
4.2 KiB
Makefile
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"
|