在目标“安装”之后如何执行cmake add_custom_command

时间:2020-06-02 12:32:19

标签: linux cmake linker installation rpath

我有一个安装在/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才能使用与我的插件一起部署的lib_foobar.so的另一个(兼容ABI的)版本。我不想修改原始库,因为不是系统的所有其他用户都可能需要/拥有新版本。

我的想法如下:

  • 我照常构建插件
  • 我将其安装到CUSTOM_WORKSPACE
  • 在安装my_plugin时,我现在也将mp_lib.so复制到CUSTOM_WORKSPACE/mp_lib_custom.so中,并确实将插件链接到CUSTOM_WORKSPACE/mp_lib_custom.so
  • 然后我也将lib_foobar_new.so复制到CUSTOM_WORKSPACE

这允许所有其他用户按原样使用常规my_program,并且只有使用my_plugin的用户才具有其自己的工作区以及自己的mp_lib_custom.so和自己的{ {1}}:

CMakeLists.txt

lib_foobar_new.so

输出:

...
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 指向my_plugin.so的链接
  • ./mp_lib_custom.so指向mp_lib_custom.so的链接
  • 因此,我从lib_foobar_new.so安装的目录中复制了mp_lib_custom.so,其myprogram不再正确

问题

现在,我需要在调用RPATH之后用自定义命令修补mp_lib_custom.so的RPATH(因为该副本尚不存在)。

我尝试过:

cmake install

但是我似乎以某种方式误解了某些东西,或者“安装”不是CMake-Target?!

0 个答案:

没有答案