最近,我需要确保我们的软件可以使用cpackRHEL 7及其免费重建(例如CentOS 7)进行打包.尽管如此,我一直遇到RHEL 6.x及其免费重建所不存在的问题:cpack生成的RPM 都在其%files部分系统目录条目中具有如下内容:
%dir %attr(0755, root, root) "/"
%dir %attr(0755, root, root) "/usr"
%dir %attr(0755, root, root) "/usr/bin"
%dir %attr(0755, root, root) "/usr/share"
%dir %attr(0755, root, root) "/usr/share/applications"
%dir %attr(0755, root, root) "/usr/share/doc"
%dir %attr(0755, root, root) "/usr/share/icons"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable/apps"enter code here
Run Code Online (Sandbox Code Playgroud)
不应该由包声明.
AFAIK,这个要求多年来一直在RPM规范中,但仅在RPM的最新版本(即比4.8.0更新)中强制实施.由于RHEL 7与RPM 4.11.1捆绑在一起,因此在下列期间cpack生成的内容filesystem-3.2-18.el7.x86_64与下面的错误冲突yum install ...:
file / from install of tunesviwer-1.4-2.noarch conflicts with file from package filesystem-3.2-18.el7.x86_64
file /usr/bin from install of tunesviewer-1.4-2.noarch conflicts with file from package filesystem-3.2-18.el7.x86_64
[...]
Run Code Online (Sandbox Code Playgroud)
我试图使用一个cmake由以下组成的小模块:
set(CPACK_RPM_SPEC_MORE_DEFINE "%define ignore \#")
set(CPACK_RPM_USER_FILELIST "%ignore /" "%ignore /usr" "%ignore /usr/bin" "%ignore /usr/share" "%ignore /usr/share/applications" "%ignore /usr/share/doc" "%ignore/usr/share/icons" "%ignore /usr/share/icons/hicolor" "%ignore /usr/share/icons/hicolor/scalable" "%ignore /usr/share/icons/hicolor/scalable/apps")
Run Code Online (Sandbox Code Playgroud)
和包括它的前右CMakeLists.txt的include(CPack).但生成的RPM仍然包含这些系统目录:(
作为一个临时的复制,我一直在使用文件冲突中给出的提示来安装带有"Filesystem"的包,即使用该rpmrebuild实用程序删除该%files部分中的这些系统目录条目.显然,这根本不是解决方法.
有人找到了更好的方法吗?
use*_*394 10
我等不起了.因此,查看最新的cmake3.0.0版本,CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST新版本支持具有合理默认值的变量
[编辑]在查看2.8.12的文档时,该对也受到旧版本的支持.
由于cmake源自带CMakeLists.txt文件,并可以生成包开箱即用的,包括RPM(虽然我需要调整,以适应RHEL的包命名规则的设置,但是这并不难做到),所以我只是说干就干第一自举cmake-3.0.0用cmake 2.8.11,rpmrebuild -pe修复所产生的cmake3.0 .0 RPM,yum安装它,然后用它来做第二个bootstrap.现在一切都很好.问题解决了.
我的离别思想是kitware应该更好地编写文档.描述很多变量的方式是密集甚至令人困惑的 - 缺乏示例是一个明显的缺陷.
此外,kitware应该吃自己的dogfood:提供使用cmake构建cmake的说明,而不是使用autotools x-(
| 归档时间: |
|
| 查看次数: |
3224 次 |
| 最近记录: |