在我的項目中,我使用cmake來構建構建系統,我需要使用ExternalProject_add構建一個外部項目(這裏以zeromq爲例)在RPM軟件包編譯好的二進制文件,但我需要生成的RPM有正確的「提供」的信息告訴該庫提供,就像下面當使用CPack打包現有的二進制文件時,'CPACK_RPM_PACKAGE_AUTOPROV'不起作用
libzmq.so.5()(64bit)
zeromq = 4.1.2-1.el7
zeromq(x86-64) = 4.1.2-1.el7
但不知何故,與CPACK_RPM_PACKAGE_AUTOPROV設置爲1,內置RPM仍然沒有正確的「提供」信息,我將在下面提供「提供」信息,但不提供圖書館信息
zeromq = 4.1.2-1
zeromq(x86-64) = 4.1.2-1
中的CMakeLists.txt(只需要一些關鍵內容),因爲這是
cmake_minimum_required (VERSION 3.4.0 FATAL_ERROR)
set(COMP zeromq)
set(CompVersion 4.1.2)
set(CompURL http://download.zeromq.org/zeromq-${CompVersion}.tar.gz)
set(CompMD5 159c0c56a895472f02668e692d122685)
project(${COMP} VERSION ${CompVersion})
include(ExternalProject)
ExternalProject_add(${COMP}
PREFIX ${COMP}
URL ${CompURL}
URL_MD5 ${CompMD5}
CONFIGURE_COMMAND <SOURCE_DIR>/configure --without-libsodium --prefix=${CMAKE_INSTALL_PREFIX})
install(FILES ${CMAKE_INSTALL_PREFIX}/lib/libzmq.so.5
${CMAKE_INSTALL_PREFIX}/lib/libzmq.so
${CMAKE_INSTALL_PREFIX}/lib/libzmq.so.5.0.0
DESTINATION lib64)
string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
list(LENGTH VERSION_LIST VERSION_LIST_LENGTH)
list(GET VERSION_LIST 0 CPACK_PACKAGE_VERSION_MAJOR)
list(GET VERSION_LIST 1 CPACK_PACKAGE_VERSION_MINOR)
if(VERSION_LIST_LENGTH GREATER 2)
list(GET VERSION_LIST 2 CPACK_PACKAGE_VERSION_PATCH)
endif()
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_VENDOR "Test")
set(CPACK_RPM_PACKAGE_GROUP "3rd-party-software")
set(CPACK_RPM_PACKAGE_AUTOPROV 1)
set(CPACK_RPM_PACKAGE_AUTOREQ 0)
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
/usr/lib
/usr/lib64)
set(CPACK_RPM_COMPONENT_INSTALL OFF)
include(CPack)
是否有人知道爲什麼會這樣「CPACK_RPM_PACKAGE_AUTOPROV」選項不生效?我怎樣才能讓它在RPM中自動生成這些'PROVIDES'信息?感謝您的時間,如果您能提供一些提示,我們將非常感謝。
感謝,但它的奇怪的是,在同一個項目中,如果能夠「 CPACK_RPM_PACKAGE_AUTOREQ「,它工作並在RPM包中生成'REQUIRENAME'信息。根據我的理解,如果只有通過'add_library'添加的庫的選項,'CPACK_RPM_PACKAGE_AUTOREQ'選項的行爲應該是相同的,對嗎? – Rex
我需要添加許多這樣的項目,如果手動添加'提供'信息,它需要很多時間。但仍然感謝:) – Rex
是否選項'CPACK_RPM_PACKAGE_AUTOREQ'檢測庫,libzmq.so'從哪個庫?或者這個選項與這個3D方庫相關嗎? – Tsyvarev