catkin_make生成的编译文件夹目录结构说明
在 ROS 中使用 catkin_make
构建后,生成的 build
和 devel
目录结构及 roslaunch
的运行逻辑如下:
1. catkin_make
生成的目录结构
(1) build/
目录
存放 编译中间文件(如 .o
、.cmake
等),不直接参与运行:
build/
├── CMakeCache.txt # CMake 缓存
├── CMakeFiles/ # CMake 临时文件
├── catkin/ # Catkin 生成的配置
├── catkin_generated/ # 自动生成的代码(如消息/服务)
├── your_package/ # 你的包名
│ ├── CMakeFiles/ # 包的编译临时文件
│ ├── Makefile # 编译规则
│ └── ...
└── ...
(2) devel/
目录
存放 最终生成的可执行文件、库、消息头文件等,是 ROS 运行时的核心目录:
devel/
├── include/ # C++ 头文件
│ └── your_package/ # 你的包名
│ ├── YourMsg.h # 由 `.msg` 生成的头文件
│ └── ...
├── lib/ # 可执行文件和库
│ ├── your_package/
│ │ ├── your_node # 编译后的节点(C++)
│ │ └── ...
│ ├── python3/
│ │ └── dist-packages/ # Python 模块(由 `scripts/` 安装)
│ └── ...
├── share/
│ └── your_package/
│ ├── cmake/ # 包的 CMake 配置
│ ├── launch/ # 复制的 `.launch` 文件
│ └── ...
├── setup.bash # 环境配置脚本
└── ...
2. roslaunch
运行时加载的文件路径
当执行 roslaunch your_package your_launch.launch
时,ROS 按以下顺序查找文件:
(1) 查找 .launch
文件
- 优先级 1:
devel/share/your_package/launch/your_launch.launch
(catkin_make
会将src/your_package/launch/
下的文件复制到这里) - 优先级 2:
src/your_package/launch/your_launch.launch
(仅当devel/
下不存在时才会使用源码)
(2) 运行的可执行文件
- C++ 节点:
devel/lib/your_package/your_node
(编译后的二进制文件) - Python 节点:
src/your_package/scripts/your_script.py
(通常软链接到devel/lib/python3/dist-packages/
)
3. 关键验证方法
(1) 检查 roslaunch
使用的 .launch
文件路径
roscd your_package/launch # 进入包的 launch 目录
ls # 查看文件是否存在
如果 devel/share/your_package/launch/
下有文件,则优先使用。
(2) 检查节点可执行文件路径
which your_node # 查看 C++ 节点路径
输出应为:
/path/to/your_workspace/devel/lib/your_package/your_node
(3) 检查 Python 节点路径
rosrun your_package your_script.py --help
若输出正常,说明 Python 脚本已被正确链接到 devel/
。
4. 常见问题与解决
Q1: 修改代码后 roslaunch
仍运行旧版本?
- 原因: 未重新编译或未更新
devel/
文件。 - 解决:
catkin_make clean # 清理旧编译 catkin_make # 重新编译 source devel/setup.bash # 更新环境
Q2: 如何强制使用 src/
下的源码?
- 不推荐,但可通过临时删除
devel/share/your_package/launch/
实现。
5. 总结
目录/文件 | 作用 | roslaunch 是否使用 |
---|---|---|
build/ | 编译中间文件 | ❌ 不直接使用 |
devel/include/ | C++ 消息头文件 | ✅ 通过 #include 调用 |
devel/lib/your_package/ | C++ 可执行文件 | ✅ 直接运行 |
devel/share/launch/ | 复制的 .launch 文件 | ✅ 优先使用 |
src/your_package/ | 源码(.cpp , .py , .launch ) | 仅在 devel/ 缺失时使用 |
关键步骤:
- 修改代码 →
catkin_make
→source devel/setup.bash
。 roslaunch
默认优先使用devel/
下的编译版本。