作为“安装后 Hook ”,我需要执行类似这样的安装命令
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
应该在安装后的“最终”文件上运行(为了创建有效的缓存)
最佳答案
答案非常简单(感谢来自 IRC 的 Nils Gladitz):
使用反斜杠转义变量 ${CMAKE_INSTALL_PREFIX}
会延迟它的扩展,直到安装时它保持正确的值,对于通过 CPack 的安装也是如此:
install(CODE "execute_process(COMMAND some_command \${CMAKE_INSTALL_PREFIX}/some_folder"))
关于cmake - cpack 和安装(代码 ...) - CPACK_PACKAGING_INSTALL_PREFIX 与 CMAKE_INSTALL_PREFIX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477588/