我正在尝试将我们的构建系统转换为cmake并且遇到了它生成的RPM(通过cpack)的一个有趣的问题:它会自动添加它认为你的RPM具有的所有依赖关系所需库列表。
总的来说,这很好,但就我而言,这是灾难性的。不幸的是,我们构建的开发包最终安装了一个我们自己开发的工具,它使用rpm将它们安装在一个独立的RPM数据库中。这是愚蠢的,但我无法改变它。这意味着任何普通库将依赖的所有系统库(如libc或libpthread)都不在我们的开发包中使用的RPM数据库中。因此,如果我们的某个开发包的RPM列出了所需的系统库,那么我们无法安装它,因为rpm会认为它们没有安装(因为它们列在普通数据库而不是正常数据库中)它被告知在安装我们的包时使用)。我们当前构建的东西处理得很好,因为它没有列出任何系统库作为RPM中的依赖项,但是cpack会自动填充RPM的所需库列表并将系统库放在那里。我需要一种方法来阻止它这样做。
我尝试将CPACK_RPM_PACKAGE_REQUIRES
设置为""
,但这没有效果。 RPM cpack生成仍然最终会列出所需的系统库。在这一点上,我所能想到的就是复制RPM cpack生成器并将其破解以实现我想要的并使用它而不是标准的生成器,但我宁愿避免这种情况。有没有人知道如何让cpack停止使用所需的库填充RPM?
答案 0 :(得分:10)
见
的底部http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html
autoreqprov标记 - 禁用自动依赖关系处理
有时可能不需要RPM的自动依赖性处理。在这些情况下,autoreqprov标记可用于禁用它。此标记采用yes / no或0/1值。例如,要禁用自动依赖关系处理,可以使用以下行:
AutoReqProv:否
修改强>
要在cmake中设置此项,您需要执行set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
。似乎需要额外空间在no之前(或之后)才能使其工作。似乎cpack的RPM模块有一个bug,这使得它不会让你将它的变量设置为短于3个字符的任何变量。
答案 1 :(得分:3)
要添加到上面的Mark Lakata's answer,可以看到"最高转速"文档
http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html
还增加了:
autoreq 和 autoprov 标记可用于禁用自动处理要求或"提供"只是分别。
至少在我的CPackRPM版本中,似乎可以设置类似的变量,例如。
set(CPACK_RPM_PACKAGE_AUTOREQ " no")
仅禁用'要求'。
的自动依赖关系处理