CPack 将系统目录添加到生成的 RPM
CPack adds system directories to generated RPM
我有一个 CMake 项目,我使用 CPack 为我的 CentOS YUM 存储库生成 RPM。但是,当我尝试安装我生成的 RPM 时,出现此错误:
file /usr from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
file /usr/bin from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
file /usr/lib from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
进一步检查 RPM 的内容,我发现它包括以下文件和目录:
$ rpm -qlp clstrd-0.1.0-Linux.rpm
/usr
/usr/bin
/usr/bin/clstrd
/usr/lib
/usr/lib/libclstrd.a
我的问题是: 如何强制 CMake 从 RPM 中排除 /usr
或 /usr/bin
等常见目录?这不应该自动完成吗?
我试过 CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
但没有成功。
编辑: 以下是我的 CMakeLists.txt
的相关部分
# Targets
add_library(clstrd_lib ${SOURCE_FILES})
...
add_executable(clstrd main.cpp)
target_link_libraries(clstrd clstrd_lib)
...
# Installation configuration.
install(TARGETS clstrd_lib clstrd
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
# CPack configuration.
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyAwesomePackage")
set(CPACK_PACKAGE_VENDOR "MyAwesomeVendor")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
set(CPACK_PACKAGE_EXECUTABLES "clstrd", "MyAwesomeExecutable")
set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
set(CPACK_RPM_PACKAGE_REQUIRES, "libpqxx, gtest, gflags, root, root-netx, xrootd-client-libs")
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION, "/usr /usr/bin /usr/lib")
set(CPACK_SOURCE_GENERATOR "RPM")
include(CPack)
这似乎是 cmake 2.8.9 中的一个错误,已在 cmake 2.8.12 中修复:
你可以试试这个,
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib/systemd")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib/systemd/system")
在 CentOS7 上使用 cmake 2.8.12.2 测试正常。
我有一个 CMake 项目,我使用 CPack 为我的 CentOS YUM 存储库生成 RPM。但是,当我尝试安装我生成的 RPM 时,出现此错误:
file /usr from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
file /usr/bin from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
file /usr/lib from install of clstrd-0.1.0-1.x86_64 conflicts with file from package filesystem-3.2-20.el7.x86_64
进一步检查 RPM 的内容,我发现它包括以下文件和目录:
$ rpm -qlp clstrd-0.1.0-Linux.rpm
/usr
/usr/bin
/usr/bin/clstrd
/usr/lib
/usr/lib/libclstrd.a
我的问题是: 如何强制 CMake 从 RPM 中排除 /usr
或 /usr/bin
等常见目录?这不应该自动完成吗?
我试过 CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
但没有成功。
编辑: 以下是我的 CMakeLists.txt
# Targets
add_library(clstrd_lib ${SOURCE_FILES})
...
add_executable(clstrd main.cpp)
target_link_libraries(clstrd clstrd_lib)
...
# Installation configuration.
install(TARGETS clstrd_lib clstrd
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
# CPack configuration.
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyAwesomePackage")
set(CPACK_PACKAGE_VENDOR "MyAwesomeVendor")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
set(CPACK_PACKAGE_EXECUTABLES "clstrd", "MyAwesomeExecutable")
set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
set(CPACK_RPM_PACKAGE_REQUIRES, "libpqxx, gtest, gflags, root, root-netx, xrootd-client-libs")
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION, "/usr /usr/bin /usr/lib")
set(CPACK_SOURCE_GENERATOR "RPM")
include(CPack)
这似乎是 cmake 2.8.9 中的一个错误,已在 cmake 2.8.12 中修复:
你可以试试这个,
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib") list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib/systemd") list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib/systemd/system")
在 CentOS7 上使用 cmake 2.8.12.2 测试正常。