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) 并保持默认后,效果很好。

我刚刚删除了构建目录,再次运行cmakecpack -G RPM,一切正常。只需使用rpm -qpl yourpackage.rpm 检查新的 RPM 生成文件,看看它是否正常。

如果您确实需要排除文件的列表,请尝试改用CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION

【讨论】:

以上是关于CPack 文件列表与文件系统冲突的主要内容,如果未能解决你的问题,请参考以下文章

安装 CMake 组件时如何获取将要安装的文件列表

markdown git获取冲突文件列表

cpack:如何在安装过程中将程序与文件扩展名关联?

sh 获取本地存储库中冲突文件的列表

cpack 生成带有 %files 条目的 RPM,这些条目与 RPM 规范冲突。怎么修?

CPack WIX 在安装树之外安装一个文件