新手求助cmakelist.txt添加依赖库问题

新手求助cmakelist.txt添加依赖库问题,第1张

添加OpenCV库为例

LINK_DIRECTORIES("/usr/local/opencv-3.1.0/Release/lib")

TARGET_LINK_LIBRARIES( yourProjectName opencv_imgproc opencv_highgui opencv_cor

e opencv_imgcodecs)

在linux平台下,按照正常来说,在编译C时,只需要链接B就好了。

但是使用Cmake编译时,会报找不到libA.so的错误。

通过cmake生成的gcc命令看到,编译命令确实将A也链接了进来。

那么问题来了,为什么cmake会将B的依赖加到我C的头上?

原因在于 target_link_libraries() 命令。

熟悉cmake的朋友都知道这是设置链接库的命令。

但其实它的原型是:

可以通过PRIVATE | PUBLIC | INTERFACE 设置依赖的传递性.

摘抄一下官方文档的描述:

其实大白话就是

好了,大家以后再使用 target_link_libraries() 的时候就可以加上 PRIVATE 关键字,这样C就不会链接A了。

需要注意

根据CMP0023描述:

加关键字和不加关键字的用法不可以混合使用,如下面一起使用就会报错。

你好,

上面写了报错信息在CMakeError.log 中,

根据 LINK: fatal error LNK1104:无法打开文件"MSCVRTD.lib"  找到解决方法如下,你可以试一下。

添加头文件目录:

配置属性-->C/C++-->常规-->附加包含目录 加上头文件存放的目录。

添加lib文件:

配置属性-->链接器-->输入-->附加依赖项加入库名(×××.lib);或者是在cpp源文件中用#pragma comment(lib,"×××.lib")来代替。

此时编译会提示:fatal error LNK1104: 无法打开文件“×××.lib”,原因是编译器找不到lib文件。

给项目添加库文件路径

在VS中右击项目点属性:

配置属性-->链接器-->常规-->附加目录 。在里面填上库文件所在的路径即可。

直接添加库文件到工程中.

就像你添加.h和.cpp文件一样,把lib文件添加到工程文件列表中去。右键项目点添加选择现有项目,选择lib文件点确定即可。这个方法适用于在工程的debug版本和Release版本中都使用同一个lib库文件。

祝你生活愉快。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11389804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存