cmake:确定哪些库是链接的二进制目标

时间:2010-09-21 15:05:24

标签: shared-libraries cmake

我想在CMake中实现一个能够通过make install-TARGET命令安装单个二进制文件/目标的功能。这对于自定义目标来说相当简单。但是,当有问题的目标二进制文件与项目的其他库(BUILD_SHARED_LIBS=ON)动态链接时,我还需要安装接收库。有没有办法以某种方式查询库列表?

我查看了目标属性,但没有发现任何相关内容。

非常感谢有关如何获取lib列表和/或实现上述功能的其他方法的提示!

[编辑]

示例:
我们假设项目MyProj有一个CMake目标“myprog”,它生成二进制myprog。我想用make install-myprog安装 这个二进制文件。但是,myproglibmy1.so相关联,后者与libmy2.so相关联,这两者都是MyProj的一部分。 我需要一种机制来确定我需要在libmy1.so上同时安装libmy2.somyprog

2 个答案:

答案 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以及mylib1mylib2的安装,必须创建一个使用构建树中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").