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

What is the difference between build dependency and runtime dependency

有人告诉我构建依赖性和运行时依赖性是不同的。但我不知道为什么。如果在构建时需要一些依赖,我们不能也说 运行 是必需的吗?如果在 运行 时需要一些依赖,我们是否也可以说它是构建所必需的?

我正在学习 ROS 并正在阅读这篇文章 link:http://wiki.ros.org/catkin/package.xml

我发现有 <build_depend><exec_depend>,这让我很惊讶,因为我一直认为 build-depend 和 exec-depend 总是一样的...

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

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

这是因为当您构建时,您希望 message_generation 为您的消息定义创建头文件,但一旦它们存在,您就不需要 generate 运行时的新消息 - 它只发生在构建过程中。

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

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

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