2016-03-25 51 views
0

在我的項目中,我使用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'信息?感謝您的時間,如果您能提供一些提示,我們將非常感謝。

回答

0

CPACK_RPM_PACKAGE_AUTOPROV變量,通過其description

可以用於使能(1,是)或停用(0,否)由包提供的共享庫的自動列表。

僅由add_library(SHARED)創建目標影響。

CMake和CPack都不會試圖從其擴展中推斷出文件的類型,這就是爲什麼手動安裝的文件(通過install(FILES))不受影響。

對於添加指定的文件到列表基礎提供,使用可變CPACK_RPM_PACKAGE_PROVIDES

可以用來設置RPM相關性(提供)。一個RPM文件所提供的軟件包列表可以用打印:

轉-qp --provides file.rpm

+0

感謝,但它的奇怪的是,在同一個項目中,如果能夠「 CPACK_RPM_PACKAGE_AUTOREQ「,它工作並在RPM包中生成'REQUIRENAME'信息。根據我的理解,如果只有通過'add_library'添加的庫的選項,'CPACK_RPM_PACKAGE_AUTOREQ'選項的行爲應該是相同的,對嗎? – Rex

+0

我需要添加許多這樣的項目,如果手動添加'提供'信息,它需要很多時間。但仍然感謝:) – Rex

+0

是否選項'CPACK_RPM_PACKAGE_AUTOREQ'檢測庫,libzmq.so'從哪個庫?或者這個選項與這個3D方庫相關嗎? – Tsyvarev

相關問題