我尝试打包用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
我尝试在CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
中设置CMakeList.txt
,但这不起作用。
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/local /usr/local/etc /usr/local/bin /usr/local/include`
答案 0 :(得分:1)
我的C ++项目遇到了同样的问题,为此,当尝试在CentOS上安装生成的RPM时,yum会引发与现有文件或目录的冲突错误(例如/ usr / bin目录)。
所以,在看了CPackRPM文档(我在Debian Testing上使用cmake 3.10.2-1)后,我意识到对于CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
选项,已经存在一个已包含的默认列表: /etc; /etc/init.d /usr; /usr/bin; /usr/include; /usr/lib; /usr/libx32; /usr/lib64; /usr/share; /usr/share/aclocal; /usr/share/doc
。
我实际做的是用相同的选项覆盖。不确定cpack是否丢失或类似的事情,但是从我的set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
中删除我自己的CMakeLists.txt
并保留默认设置后,效果很好。
我刚刚删除了构建目录,再次运行cmake
和cpack -G RPM
,一切正常。只需使用rpm -qpl yourpackage.rpm
检查新生成的RPM文件,看看是否正常。
如果您真的需要一个已排除文件的列表,请尝试使用CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
。