如何仅为特定COMPONENT硬编码CMAKE_INSTALL_PREFIX?
针对特定CMake安装组件自定义CMAKE_INSTALL_PREFIX的解决方案
可以实现仅为指定安装组件设置独立的CMAKE_INSTALL_PREFIX,无需重复修改全局配置。核心思路是在自定义的install-python目标中,通过命令行参数临时覆盖CMAKE_INSTALL_PREFIX的值,具体修改如下:
add_library(foo SHARED foo.cpp) # 为python组件设置安装规则 install( TARGETS foo DESTINATION . COMPONENT python) # 自定义install-python目标,传递特定的安装前缀 add_custom_target( install-python DEPENDS foo COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=python -DCMAKE_INSTALL_PREFIX="${CMAKE_BINARY_DIR}/python" -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
原理说明
cmake_install.cmake脚本会优先读取命令行传入的CMAKE_INSTALL_PREFIX参数,优先级高于CMakeLists.txt中的全局设置- 执行
make install-python时,会将foo安装到${CMAKE_BINARY_DIR}/python路径下,同时保留install指令处理RPATH的特性——仅保留目标属性INSTALL_RPATH指定的LC_RPATH - 执行
make install时,依然使用默认的CMAKE_INSTALL_PREFIX完成常规安装流程
执行流程
- 执行
cmake ..完成初始配置 - 执行
make install-python将python组件安装到指定路径 - 执行
make install完成其他组件的默认路径安装
内容的提问来源于stack exchange,提问作者user3667089
相关产品推荐
相关产品推荐

