私のプロジェクトでは、cmake を使用してビルド システムを構築します。ExternalProject_add を使用して外部プロジェクト (ここではたとえば zeromq を使用) をビルドし、コンパイルされたバイナリを RPM パッケージにパックする必要がありますが、生成された RPM が必要です。以下のように、「PROVIDES」情報を修正して、提供するライブラリを示します。
libzmq.so.5()(64bit)
zeromq = 4.1.2-1.el7
zeromq(x86-64) = 4.1.2-1.el7
しかし、どういうわけか、CPACK_RPM_PACKAGE_AUTOPROV を 1 に設定すると、ビルドされた 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 でこれらの「PROVIDES」情報を自動生成するにはどうすればよいですか? お時間をいただきありがとうございます。ヒントを提供していただければ幸いです。