我正在尝试将工作中的构建系统转换为 cmake,但它生成的 RPM(通过 cpack)遇到了一个有趣的问题:它会自动将它认为您的 RPM 具有的所有依赖项添加到其所需的列表中图书馆。
总的来说,这很好,但对我来说,这是灾难性的。不幸的是,我们构建的开发包最终使用我们自己开发的工具进行安装,该工具使用 rpm 将它们安装在与系统数据库不同的单独 RPM 数据库中。这很愚蠢,但我无法改变它。这意味着任何普通库所依赖的所有系统库(例如 libc 或 libpthread)都不在我们的开发包所使用的 RPM 数据库中。因此,如果我们的某个开发包的 RPM 列出了所需的系统库,那么我们就无法安装它,因为 rpm 会认为它们没有安装(因为它们列在普通数据库中,而不是列在数据库中)。在安装我们的软件包时被告知要使用它)。我们当前的构建内容可以很好地处理这个问题,因为它没有将任何系统库列为 RPM 中的依赖项,但 cpack 会自动填充 RPM 所需库的列表并将系统库放入其中。我需要一种方法来阻止它这样做。
我尝试设置CPACK_RPM_PACKAGE_REQUIRES
to ""
,但这没有效果。 RPM cpack 生成的最终结果仍然是列出所需的系统库。此时我能想到的就是复制 RPM cpack 生成器并对其进行修改以执行我想要的操作并使用它而不是标准生成器,但我宁愿避免这种情况。有谁知道如何让 cpack 停止使用所需的库填充 RPM?
见底部
http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html
autoreqprov 标签 — 禁用自动依赖处理
有时可能不需要 RPM 的自动依赖性处理。在这些情况下,可以使用 autoreqprov 标签来禁用它。该标签采用 yes/no 或 0/1 值。例如,要禁用自动依赖性处理,可以使用以下行:
自动请求验证: 否
EDIT:
为了在 cmake 中设置它,你需要这样做set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
. The 似乎需要额外的空间在“否”前面(或后面)才能使其正常工作。看来 cpack 的 RPM 模块有一个错误,导致它不允许您将其某些变量设置为短于 3 个字符的长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)