我想在CMake中实现一个能够通过make install-TARGET
命令安装单个二进制文件/目标的功能。这对于自定义目标来说相当简单。但是,当有问题的目标二进制文件与项目的其他库(BUILD_SHARED_LIBS=ON
)动态链接时,我还需要安装接收库。有没有办法以某种方式查询库列表?
我查看了目标属性,但没有发现任何相关内容。
非常感谢有关如何获取lib列表和/或实现上述功能的其他方法的提示!
[编辑]
示例:
我们假设项目MyProj
有一个CMake目标“myprog”,它生成二进制myprog
。我想用make install-myprog
安装 这个二进制文件。但是,myprog
与libmy1.so
相关联,后者与libmy2.so
相关联,这两者都是MyProj
的一部分。
我需要一种机制来确定我需要在libmy1.so
上同时安装libmy2.so
和myprog
。
答案 0 :(得分:0)
我没有进行* nix开发,但您正在寻找的功能与Windows的“Dependency Walker”相同。快速搜索提出了以下内容:
Dependency resolution in Linux
希望它有所帮助。
答案 1 :(得分:0)
最优雅的解决方案似乎如下。必须使用install command的CMake COMPONENT参数将每个安装目标分配给组件。例如在问题中,这将是这样的:
install(TARGETS myprog DESTINATION ${BIN_DEST_DIR} COMPONENT myprog),
并且类似于共享库
install(TARGETS my1 my2 DESTINATION ${LIB_DEST_DIR} COMPONENT my-libs).
现在,要调用myprog
以及mylib1
和mylib2
的安装,必须创建一个使用构建树中cmake_install.cmake
位置的自定义目标:
add_custom_target(install-myprog
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=my-libs -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=myprog -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
COMMENT "Installing myprog").