【问题标题】:How to make two different RPMs with one build?如何用一个构建制作两个不同的 RPM?
【发布时间】:2018-03-24 10:06:29
【问题描述】:

目前,我正在使用以下 CMakeLists.txt 文件构建一个名为 firstrpm 的 RPM。我将规范文件扩展为具有 %package 指令的子包,现在我想扩展 CMakeLists 以制作两个 rpm(比如 firstrpm 和 secondrpm)。我怎样才能扩展它以使第二个 RPM 也具有不同的包名称,使用单个构建?

set(CPACK_PACKAGE_RELEASE_VERSION ${PROJECT_VERSION_RELEASE})
set(CPACK_PACKAGE_MINOR_VERSION ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_SERVICE_PACK ${PROJECT_VERSION_SERVICE_PACK})
set(CPACK_PACKAGE_BUILD ${PROJECT_VERSION_BUILD})
set(CPACK_SPEC_FILE_DIR ${CMAKE_CURRENT_BINARY_DIR})    
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_NAME "firstrpm")
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_RELEASE_VERSION}.${CPACK_PACKAGE_MINOR_VERSION}.${CPACK_PACKAGE_SERVICE_PACK}-${CPACK_PACKAGE_BUILD}.${CMAKE_SYSTEM_PROCESSOR}")

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${CPACK_PACKAGE_NAME}.spec.in" "${CPACK_SPEC_FILE_DIR}/${CPACK_PACKAGE_NAME}.spec" @ONLY IMMEDIATE)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${CPACK_PACKAGE_NAME}-devel.spec.in" "${CPACK_SPEC_FILE_DIR}/${CPACK_PACKAGE_NAME}-devel.spec" @ONLY IMMEDIATE)
set(CPACK_RPM_USER_BINARY_SPECFILE "${CPACK_SPEC_FILE_DIR}/${CPACK_PACKAGE_NAME}.spec")

set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CMAKE_BINARY_DIR}/_CPack_Packages/Linux/RPM/RPMS/${CMAKE_SYSTEM_PROCESSOR}/${CPACK_PACKAGE_FILE_NAME}.rpm")
include(CPack)

【问题讨论】:

标签: cmake rpm rpmbuild rpm-spec cpack


【解决方案1】:

来自一个源包的第二个二进制包称为“子包”。您只需在规范文件(或 spec.in)中添加几行。见:

http://ftp.rpm.org/max-rpm/s1-rpm-subpack-spec-file-changes.html

而且您不需要手动创建 -devel 子包。除非您指定“BuildArch: noarch”,否则它将自动创建。

【讨论】:

  • 我已经按照该教程创建了一个子包,两个 RPM 是通过手动执行 rpmbuild 创建的。 (在我为同一问题提出的这个更清晰的问题中进行了解释:stackoverflow.com/questions/46727419/…)。我想用 CPACK 做同样的事情,因为上面的 CMake 文件是与一个包一起使用的。
猜你喜欢
  • 1970-01-01
  • 2022-09-09
  • 2023-02-16
  • 2016-04-28
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多