【发布时间】:2020-08-26 22:16:06
【问题描述】:
我有一个构建,当前设置的步骤如下:
cmake
make
cpack -G TGZ
cpack -G RPM
我现在有一个问题,我希望将一些文件包含在 RPM 中,但不包含在 tarball 中。有没有办法根据使用的生成器使安装命令有条件?
简单明了的方法是错误的:
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()
我认为这是错误的,因为配置阶段(运行 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
这对于 tarball 来说不是必需的。
【问题讨论】:
-
事实证明我可以使用 set(CPACK_RPM_SPEC_MORE_DEFINE "%define _build_id_links none") 在 RPM 规范中禁用 .build-id 来解决我的问题,但如何以其他方式执行此操作的问题仍然存在.
-
不是答案,因为我不知道 cmake,但传统上你需要在规范文件中添加额外的“源”行,eg
Source1: myfile.txt跨度>