CMake自动链接外部库依赖项

时间:2011-09-08 18:05:24

标签: linker cmake shared-libraries

我目前正在开发一个库HAMMER,并使用CMake作为其构建系统。我正在整合YARP,它也使用CMake作为构建系统。因此,我使用标准CMake方法导入YARP,即。将CMake指向在YARP编译期间生成并使用YARPConfig.cmakeYARP_LIBRARIES生成的YARP_INCLUDE_DIRS文件。到目前为止,非常好。

问题是在链接阶段(我的库)CMake将自动链接到YARP所依赖的所有库。例如,YARP使用gsl但我的库不使用(最多调用使用gsl的YARP方法),但gsl显示为我的库的ld依赖项之一(使用ldd)。

使用默认库路径中的库时,这不是什么大问题,但是如果需要链接到不在库路径上的库(并且不是项目的一部分),则链接将失败(因为找不到所需的库)。

这正是在尝试构建使用HAMMER(也使用CMake)的应用程序时发生的情况,因为YARP未安装在默认位置,我的应用程序尝试链接它(根据刚刚描述的行为)和失败,因为它无法找到YARP库。

有谁知道为什么CMake有这个政策?更重要的是,有没有办法解决这个问题并不意味着将YARP导入到应用程序的CMake脚本中?

谢谢!

1 个答案:

答案 0 :(得分:1)

请参阅CMake常见问题Why are libraries linked to my shared library included when something links to it?。如果你想阻止这种行为,我认为你必须改变YARP的LINK_INTERFACE_LIBRARIES属性。

相关问题