我正在尝试将我们的构建系统转换为cmake并且使用它生成的RPM(通过cpack)遇到了一个有趣的问题:它会自动将它认为你的RPM所具有的所有依赖项添加到其所需的列表中库.
总的来说,这很好,但就我而言,这是灾难性的.不幸的是,我们构建的开发包最终安装了一个我们自己开发的工具,它使用rpm将它们安装在一个独立的RPM数据库中.这是愚蠢的,但我无法改变它.这意味着任何普通库将依赖的所有系统库(如libc或libpthread)都不在我们的开发包中使用的RPM数据库中.因此,如果我们的某个开发包的RPM列出了所需的系统库,那么我们就无法安装它,因为rpm会认为它们没有安装(因为它们列在普通数据库而不是正常数据库中)它被告知在安装我们的包时使用).我们当前构建的东西处理得很好,因为它没有列出任何系统库作为RPM中的依赖项,但是cpack会自动填充RPM的所需库列表并将系统库放在那里.我需要一种方法来阻止它这样做.
我尝试设置CPACK_RPM_PACKAGE_REQUIRES到"",但没有效果.RPM cpack生成仍然最终会列出所需的系统库.在这一点上,我所能想到的就是复制RPM cpack生成器并将其破解以实现我想要的并使用它而不是标准的生成器,但我宁愿避免这种情况.有没有人知道如何让cpack停止使用所需的库填充RPM?
小智 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").该额外的空间似乎需要在(或后面)的无锋,以便为它工作.似乎cpack的RPM模块有一个bug,这使得它不会让你将它的一些变量设置为短于3个字符的任何长度.