cmake - cpack 和安装(代码 ...) - CPACK_PACKAGING_INSTALL_PREFIX 与 CMAKE_INSTALL_PREFIX

标签 cmake cpack

作为“安装后 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/

相关文章:

c++ - 使用Cmake在Qt Creator中显示头文件

c++ - 使用多个库时,在 CMakeList 中配置 target_link_libraries 的正确方法是什么?获取无法指定链接库错误

cmake - 仅在 CPack 中将文件添加到 ARCHIVE 包

centos - cpack 限制操作系统版本包可以安装在

cmake - 如何指定希望 CPack 打包到 RPM 中的文件?

cmake - "Re-run cmake no build system arguments"是什么意思?

使用 CMake 进行 Boost 测试 - 未定义的 main

linux - 如何为使用 CPack 创建的 deb 包创建桌面图标?

cmake - 如何安装 SDL 开发库以便 CMake 可以找到它

cmake - CPack 尝试构建所有目标