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"))
作为 "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"))