我目前正在开发一个名为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脚本中?
谢谢!
发布于 2011-12-22 19:22:08
请参阅CMake常见问题解答Why are libraries linked to my shared library included when something links to it?。如果您想要防止这种行为,我认为您必须更改YARP的LINK_INTERFACE_LIBRARIES属性。
https://stackoverflow.com/questions/7352526
复制相似问题