CPack 文件列表与文件系统冲突
Posted
技术标签:
【中文标题】CPack 文件列表与文件系统冲突【英文标题】:CPack filelist conflicts with filesystem 【发布时间】:2018-02-22 02:43:13 【问题描述】:我尝试打包我用 C++ 编写的项目并使用 cmake 作为构建工具。我可以创建一个 rpm 包,但我无法安装它。错误信息是:
file /usr/local from install of myapp.x86_64 conflicts with file from package filesystem-3.3-3.fc27.x86_64
file /usr/local/include from install of myapp.x86_64 conflicts with file from package filesystem-3.3-3.fc27.x86_64
file /usr/local/bin from install of myapp.x86_64 conflicts with file from package filesystem-3.3-3.fc27.x86_64
file /usr/local/etc from install of myapp.x86_64 conflicts with file from package filesystem-3.3-3.fc27.x86_64
我尝试在CMakeList.txt
中设置CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
,但它不起作用。
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/local /usr/local/etc /usr/local/bin /usr/local/include`
【问题讨论】:
【参考方案1】:我在 C++ 项目中遇到了同样的问题,因此,当尝试在 CentOS 上安装生成的 RPM 时,yum 会引发与现有文件或目录(例如 /usr/bin 目录)的冲突错误。
因此,在查看 CPackRPM 文档(我在 Debian 测试中使用 cmake 3.10.2-1)之后,我意识到对于 CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
选项,已经存在一个默认列表,其中已经包含:@987654322 @。
我实际上在做的是用相同的选项覆盖。不确定 cpack 是否会丢失或类似的情况,但是在从我的 CMakeLists.txt
中删除我自己的 set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
并保持默认后,效果很好。
我刚刚删除了构建目录,再次运行cmake
和cpack -G RPM
,一切正常。只需使用rpm -qpl yourpackage.rpm
检查新的 RPM 生成文件,看看它是否正常。
如果您确实需要排除文件的列表,请尝试改用CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
。
【讨论】:
以上是关于CPack 文件列表与文件系统冲突的主要内容,如果未能解决你的问题,请参考以下文章