2016-03-25 5 views
0

私のプロジェクトでは、cmakeを使ってビルドシステムを構築していますが、ExternalProject_addを使って外部プロジェクト(ここではzeromqなど)をビルドする必要がありますコンパイル済みのRPMパッケージのバイナリが、私は正しい持つように生成されたRPMを必要とするだけでCPACKを使って既存のバイナリをパックするとき

libzmq.so.5()(64bit) 
zeromq = 4.1.2-1.el7 
zeromq(x86-64) = 4.1.2-1.el7 

しかし、どういうわけか、1にCPACK_RPM_PACKAGE_AUTOPROVを設定すると、構築されたRPM以下のように、それが提供するライブラリどの伝えるための情報「を提供」まだ「PROVIDES」の情報が正しくない場合は、提供されたライブラリ情報なしで「PROVIDES」情報を取得します

このため
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でこれらの「提供」情報を自動生成するにはどうすればよいですか?あなたの時間のおかげで、いくつかのヒントを提供できれば非常に感謝しています。そのdescriptionによって

答えて

0

CPACK_RPM_PACKAGE_AUTOPROV変数、:

は(なし、0)、(1、はい)を有効または無効にするパッケージで提供されている共有ライブラリの自動リストを使用することができます。

のみadd_library(SHARED)によって作成ターゲットに影響します。

CMakeもCPackも拡張子からファイルの種類を推測しないため、手動でインストールされたファイル(install(FILES)経由)は影響を受けません。リストを提供するために追加与えられたファイルについては

、変数CPACK_RPM_PACKAGE_PROVIDESを使用します。

はRPMの依存関係(提供)を設定するために使用することができます。 RPMファイルの提供パッケージリストを用いて印刷することができます

のrpm -qp --provides file.rpm

+0

おかげで、しかし、可能ならば、それは、同じプロジェクトのために、という奇妙です " CPACK_RPM_PACKAGE_AUTOREQ 'を実行すると、RPMパッケージ内の' REQUIRENAME '情報を生成して生成します。私の理解として、 'add_library'によって追加されたライブラリのみのオプションであれば、 'CPACK_RPM_PACKAGE_AUTOREQ'オプションは同じ動作をしますか? – Rex

+0

私はこのような種類のプロジェクトをたくさん追加する必要があります。もし、「PROVIDES」情報を手作業で追加するには、時間がかかります。しかし、まだありがたいです:) – Rex

+0

オプション 'CPACK_RPM_PACKAGE_AUTOREQ'は' libzmq.so'が依存するライブラリを検出しますか?または、このオプションがその3Dパーティライブラリとどのように関連していますか? – Tsyvarev

関連する問題