我目前正在开发一个库HAMMER,并使用CMake作为其构建系统。我正在整合YARP,它也使用CMake作为构建系统。因此,我使用标准CMake方法导入YARP,即。将CMake指向在YARP编译期间生成并使用YARPConfig.cmake
和YARP_LIBRARIES
生成的YARP_INCLUDE_DIRS
文件。到目前为止,非常好。
问题是在链接阶段(我的库)CMake将自动链接到YARP所依赖的所有库。例如,YARP使用gsl但我的库不使用(最多调用使用gsl的YARP方法),但gsl显示为我的库的ld依赖项之一(使用ldd
)。
使用默认库路径中的库时,这不是什么大问题,但是如果需要链接到不在库路径上的库(并且不是项目的一部分),则链接将失败(因为找不到所需的库)。
这正是在尝试构建使用HAMMER(也使用CMake)的应用程序时发生的情况,因为YARP未安装在默认位置,我的应用程序尝试链接它(根据刚刚描述的行为)和失败,因为它无法找到YARP库。
有谁知道为什么CMake有这个政策?更重要的是,有没有办法解决这个问题并不意味着将YARP导入到应用程序的CMake脚本中?
谢谢!
答案 0 :(得分:1)
请参阅CMake常见问题Why are libraries linked to my shared library included when something links to it?。如果你想阻止这种行为,我认为你必须改变YARP的LINK_INTERFACE_LIBRARIES属性。