基于生成器的cpack条件行为>>

问题描述 投票:0回答:1

我有一个构建,当前使用以下步骤进行构建:

cmake
make
cpack -G TGZ
cpack -G RPM

我现在有一个问题,我希望将某些文件包含在RPM中,而不是压缩包中。有没有一种方法可以根据所使用的生成器使安装命令成为条件?

简单明了的方法是错误的:

if (NOT ${PACKAGE_TYPE} STREQUAL "TGZ")
   message("HELLO ${PACKAGE_TYPE}")
   install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/foobar DESTINATION "/usr/lib" COMPONENT core RENAME "/usr/lib/only-install-me-for-RPM")
endif()

我相信这是错误的,因为configure阶段(运行cmake)会评估条件条件,而cpack不会。我不需要两个版本,因为安装阶段是唯一不同的部分。我确实需要一种以上的安装包。

背景

为什么我要做这样奇怪的事情?我可以想到其他合理的原因,但是在这种情况下,这是因为引入了/usr/lib/.build-id。无法从cmake禁用此行为(尽管可以在.spec文件中查看https://bugzilla.redhat.com/show_bug.cgi?id=1724153

在RHEL8中,rpmbuild将文件(实际上是链接)安装在/usr/lib/.build-id中,但我自己并未对此进行说明。为了说服cmake使/ usr / lib可重定位,我必须在/ usr / lib中安装一个虚拟文件-参见https://gitlab.kitware.com/cmake/cmake/-/issues/20691

对于压缩包来说这不是必需的。

我有一个当前按以下步骤设置的内部版本:cmake make cpack -G TGZ cpack -G RPM我现在遇到一个问题,因为我希望将某些文件包括在RPM中,但不包括压缩包。是...

cmake rpmbuild cpack
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.