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

6
我被告知构建依赖和运行时依赖是不同的,但我不知道为什么。如果在构建时需要某些依赖项,难道我们不能说它对运行也是必需的吗?如果在运行时需要某些依赖项,难道我们不能说它对构建也是必需的吗?
我正在学习ROS并阅读此链接:http://wiki.ros.org/catkin/package.xml 我发现有<build_depend><exec_depend>,这让我惊讶,因为我一直认为构建依赖和执行依赖总是相同的...

请参阅http://wiki.ros.org/catkin/package.xml#Dependencies。 - MorganStark47
1个回答

5

对于许多(我认为是大多数)软件包,如果它是一个依赖项,则它既是构建依赖项又是运行时依赖项。但这并不总是如此。一个显着的例子是当您在软件包中创建新消息时,您需要在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文件更短。 此页面概述了package.xml标签及相关的CMakeLists.txt信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接