cpack 和安装(CODE ...)- CPACK_PACKAGING_INSTALL_PREFIX vs CMAKE_INSTALL_PREFIX

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

作为 "post-install hook" 我需要执行像

这样的安装命令
install(CODE "execute_process(COMMAND some_command ${CMAKE_INSTALL_PREFIX}/some_folder"))

它根据先前安装到 some_folder 中的文件在 some_folder 中创建一个文件(它编译这些文件的 index/cache)。

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

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

我看到的唯一选择是尝试在较早阶段对原始文件执行命令,创建临时文件并安装临时文件。不幸的是,这更容易出错,因为安装后 "final" 文件上的 some_command 应该是 运行(为了创建有效的缓存)

答案非常简单(感谢来自 IRC 的 Nils Gladitz):

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

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