【问题标题】:How do you make it so that cpack doesn't add required libraries to an RPM?你是如何做到的,以便 cpack 不会将所需的库添加到 RPM 中?
【发布时间】:2013-02-02 02:35:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: cmake rpm cpack


    【解决方案1】:

    见底部

    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 个字符的长度。

    【讨论】:

    • 这听起来像是我需要设置的,但问题是如何使用 cmake 和 cpack 来设置?
    • 好的。你的回答并没有给我我需要的所有信息,但足以弄清楚如何解决它,所以我更新了答案以包含有关如何使用 cmake 设置 AutoReqProv 的说明。
    • 这是正确的,但与cmake documentation 冲突,后者错误地说它可以设置为1 或0。
    • 添加了一个关于这种不一致的问题 - 请参阅gitlab.kitware.com/cmake/cmake/issues/19244
    【解决方案2】:

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

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

    这也增加了:

    autoreqautoprov 标签可分别用于禁用自动处理需求或仅“提供”。

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

    set(CPACK_RPM_PACKAGE_AUTOREQ " no")

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2016-07-19
      相关资源
      最近更新 更多