首页 > 解决方案 > 如何在目标“安装”后执行 cmake add_custom_command

问题描述

我有一个安装在/opt/my_program/. 现在我想为它写一个插件。my_program由系统的每个用户都可以使用的多个库和二进制文件组成。

[user@pc:/opt/my_program]$ tree
├── bin
│   └── mp
└── lib
    ├── lib_foobar.so
    ├── mp_lib.so
    └── other_lib.so

提供的/opt/my_program/lib/mp_lib.so链接反对/opt/my_program/lib/lib_foobar.so。现在我的插件需要mp_lib.so使用另一个(ABI 兼容)版本lib_foobar.so,我使用我的插件部署该版本。我不想修改原始库,因为并非系统的每个其他用户都可能需要/拥有新版本。

我的想法如下:

这允许每个其他用户按my_program原样使用常规,并且只有使用的用户才my_plugin拥有自己的工作区和他们自己的工作区和他们自己的工作mp_lib_custom.solib_foobar_new.so

CMakeLists.txt

...
set(CUSTOM_WORKSPACE "workspace")
set(MY_PROGRAM_DIR "/opt/my_program")
install(FILES ${CMAKE_BINARY_DIR}/my_plugin.so DESTINATION ${CUSTOM_WORKSPACE})
install(FILES ${CMAKE_SOURCE_DIR}/my_config.txt DESTINATION ${CUSTOM_WORKSPACE})
install(FILES ${CMAKE_SOURCE_DIR}/lib_foobar_new.so DESTINATION ${CUSTOM_WORKSPACE})
install(FILES ${MY_PROGRAM_DIR}/lib/mp_lib.so DESTINATION ${CUSTOM_WORKSPACE})
...

输出:

[user@pc:/tmp/workspace]$ tree
.
├── my_plugin.so
├── my_config.txt
├── lib_foobar_new.so
└── mp_lib_custom.so

问题

现在我需要在调用mp_lib_custom.so之后使用自定义命令修补 的 RPATH cmake install(因为否则副本将不存在)。

我试过了:

add_custom_command(TARGET install POST_BUILD
  COMMAND "chrpath" "<ARGUMENTS>"
  COMMAND "echo" "file-was-patched")

但不知何故,我似乎误解了一些东西,或者“安装”不是 CMake-Target?!

标签: linuxcmakelinkerinstallationrpath

解决方案


推荐阅读