2010-09-21 125 views
0

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

我查看了目标属性,但没有找到任何相关的内容。

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

[编辑]

例子:
让我们假设有MyProj有CMake的目标 “MYPROG” 生成二进制myprog项目。我想安装只有这个二进制与make install-myprog。然而myprog链接针对libmy1.so和后面的链接针对libmy2.so,这两个部分都是MyProj的一部分。 我需要一个机制来弄清楚我需要沿着myprog安装libmy1.solibmy2.so

回答

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"). 
0

我不做* nix开发,但是您要查找的功能与Windows的“Dependency Walker”相同。快速搜索提出了以下几点:

Dependency resolution in Linux

希望它能帮助。

+0

不是真的,我认为你错误理解了这个问题。请参阅上面的修改。 – pszilard 2010-09-21 17:05:38

相关问题