cpack and install(CODE ...) - CPACK_PACKAGING_INSTALL_PREFIX vs CMAKE_INSTALL_PREFIX

Posted

技术标签:

【中文标题】cpack and install(CODE ...) - CPACK_PACKAGING_INSTALL_PREFIX vs CMAKE_INSTALL_PREFIX【英文标题】: 【发布时间】:2018-01-27 15:59:06 【问题描述】:

作为“安装后挂钩”,我需要执行类似的安装命令

install(CODE "execute_process(COMMAND some_command $CMAKE_INSTALL_PREFIX/some_folder"))

它根据之前安装到some_folder 中的文件在some_folder 中创建一个文件(它编译这些文件的索引/缓存)。

这适用于安装目标,但是一旦使用 cpack $CMAKE_INSTALL_PREFIX 不再是正确的位置。

是否有像 $CMAKE_CURRENT_INSTALL_PREFIX 这样的变量始终指向当前安装目录,无论是否使用默认安装目标或 cpack 并且可以用于此目的?

我看到的唯一替代方法是尝试在早期阶段对原始文件执行命令,创建临时文件并安装临时文件。不幸的是,这更容易出错,因为some_command 应该在安装后在“最终”文件上运行(以便创建有效的缓存)

【问题讨论】:

【参考方案1】:

答案非常简单(来自 IRC 的 Nils Gladitz 表示敬意):

使用反斜杠转义变量 $CMAKE_INSTALL_PREFIX 会延迟其扩展,直到安装时它也为通过 CPack 的安装保持正确值:

install(CODE "execute_process(COMMAND some_command \$CMAKE_INSTALL_PREFIX/some_folder"))

【讨论】:

以上是关于cpack and install(CODE ...) - CPACK_PACKAGING_INSTALL_PREFIX vs CMAKE_INSTALL_PREFIX的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CPACK_INSTALL_COMMANDS?

如何使用 CPACK_PACKAGE_INSTALL_REGISTRY_KEY 添加注册表项?

同时使用 CMAKE_INSTALL_PATH 和 CPack WiX 生成器

将 fixup_bundle 结果添加到 CPack

使用 CPack 自动启动创建 deb 包 [关闭]

CPACK_DEB_PACKAGE_COMPONENT 实际上做了啥?