我有一个安装在/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
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?!