# 3.5 程序包依赖关系

## 3.5.1 一级依赖

之前在使用`catkin_create_pkg`命令时使用了几个功能包作为依赖包。现在我们可以使用`rospack`命令工具来查看一级依赖包。

```
$ rospack depends1 beginner_tutorials
```

效果：

```
std_msgs
rospy
roscpp
```

`rospack`列出了在运行`catkin_create_pkg`命令时作为参数的依赖包 这些依赖包随后保存在`package.xml`文件中。

```
$ roscd beginner_tutorials
$ cat package.xml
```

效果：

```
<package format="2">
...
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
...
</package>
```

## 3.5.2 间接依赖

在很多情况中，一个依赖包还会有它自己的依赖包，比如`rospy`还有其它依赖包。

```
$ rospack depends1 rospy
```

效果：

```
genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs
```

一个功能包还可以有好几个间接的依赖包，幸运的是使用`rospack`可以递归检测出所有的依赖包。 例如：

```
$ rospack depends beginner_tutorials

cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
rospack
roslib
rospy
```
