构建依赖项和运行时依赖项有什么区别

时间:2018-07-20 01:32:14

标签: compilation dependencies runtime

有人告诉我,构建依赖项和运行时依赖项是不同的。但是我不知道为什么。如果在构建时需要某种依赖关系,我们是否也不能说运行必需?如果在运行时需要某种依赖关系,我们是否也不能说它是构建的必要条件?

我正在学习ROS并阅读以下链接:http://wiki.ros.org/catkin/package.xml

我发现有<build_depend><exec_depend>,这让我感到惊讶,因为我一直认为构建依赖和执行依赖始终是相同的...

1 个答案:

答案 0 :(得分:0)

对于许多(我会说最多)软件包,如果它是一个依赖项,那么它既是构建依赖项,又是运行时依赖项。然而,这并非总是如此。一个明显的例子是,当您在包中创建新消息时,在package.xml中将message_generation作为构建依赖项,并将message_runtime作为执行依赖项:

<build_depend>message_generation</build_depend> 
<exec_depend>message_runtime</exec_depend>

这是因为在构建时,您希望message_generation用于创建消息定义的头文件,但是一旦它们存在,就不需要依赖项来生成新的消息在运行时-仅在构建过程中发生。

同样,message_runtime处理消息定义的运行时绑定,这与构建过程本身无关。

这些不同的依赖项标签使您可以更好地控制依赖项的管理。有一个包罗万象的标签<depend></depend>不能区分这些差异,并且如果所有依赖项都是构建和运行时依赖项,则可以使package.xml缩短。

This page概述了package.xml标记和相关的CMakeLists.txt信息。