13

我正在尝试将我们在工作中的构建系统转换为 cmake,并且遇到了它生成的 RPM 的一个有趣问题(通过 cpack):它会自动将它认为您的 RPM 具有的所有依赖项添加到其所需列表中图书馆。

总的来说,这很好,但就我而言,这是灾难性的。不幸的是,我们构建的开发包最终安装了一个我们自己开发的工具,该工具使用 rpm 将它们安装在与系统一分开的 RPM 数据库中。这很愚蠢,但我无法改变它。这意味着任何普通库将依赖的所有系统库(如 libc 或 libpthread)都不在与我们的开发包一起使用的 RPM 数据库中。因此,如果我们的开发包之一的 RPM 列出了需要的系统库,那么我们就无法安装它,因为 rpm 会认为它们没有安装(因为它们列在普通数据库中而不是它被告知在安装我们的软件包时使用)。我们当前的构建东西处理得很好,因为它没有将任何系统库列为 RPM 中的依赖项,但 cpack 会自动填充 RPM 所需库的列表并将系统库放在那里。我需要一种方法来阻止它这样做。

我尝试设置CPACK_RPM_PACKAGE_REQUIRES"",但这没有效果。RPM cpack 生成的最终仍会列出所需的系统库。在这一点上,我所能想到的就是复制 RPM cpack 生成器并将其修改为我想要的并使用它而不是标准的,但我宁愿避免这种情况。有谁知道如何让 cpack 停止使用所需的库填充 RPM?

4

2 回答 2

10

见底部

http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html

autoreqprov 标签——禁用自动依赖处理

有时可能不需要 RPM 的自动依赖处理。在这些情况下,可以使用 autoreqprov 标签来禁用它。此标记采用是/否或 0/1 值。例如,要禁用自动依赖处理,可以使用以下行:

AutoReqProv:没有

编辑:

为了在 cmake 中设置它,你需要做set(CPACK_RPM_PACKAGE_AUTOREQPROV " no"). 在no 前面(或后面)似乎需要额外的空间才能使其工作。似乎 cpack 的 RPM 模块有一个错误,因此它不会让您将其某些变量设置为任何短于 3 个字符的长度。

于 2013-02-07T17:23:53.437 回答
3

要添加到上面Mark Lakata 的答案,有一个“最大 RPM”文档的快照

http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html

这还补充说:

autoreq和autoprov标签可分别用于禁用需求的自动处理或仅“提供”

至少在我的 CPackRPM 版本中,您可以设置类似的变量,例如

set(CPACK_RPM_PACKAGE_AUTOREQ " no")

只禁用'Requires'的自动依赖处理。

于 2014-12-16T14:03:05.320 回答