我有一个构建,当前使用以下步骤进行构建:
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中,但不包括压缩包。是...