CMake学习进阶:find_library链接到debug和release

本文揭示了CMake中find_library函数的误解,重点在于如何正确指定链接静态库(nng.lib)和动态库(nngd.lib),并澄清了find_library的使用误区。通过实例和实验,作者分享了解决链接动态库的关键技巧和组合指令的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

find_library官方的解释在这里,

find_library — CMake 3.23.2 Documentationicon-default.png?t=M4ADhttps://cmake.org/cmake/help/latest/command/find_library.html因为文章比较长,就不摘录了。

开始我以为是找库文件的路径的,当然这么理解似乎也没错,于是我自己编译了一个库nng,测试了一下,

find_library(NNG_LIBRARY debug nngd optimized nng HINTS ${NNG_LIBRARY_PATH})
target_link_libraries(EasyMessage ${NNG_LIBRARY})

然后发现,程序死活只能链接到nng.lib,就是不链接到nngd.lib;然后网上各种找,因为我的cmake内容比较多,一开始根本不知道问题出在哪里,所以折腾了半天,最后才发现是对find_library这个家伙理解不对。

测试代码如下,

SET(NNG_LIBRARY_PATH "../nng1.5.2/bin/")

find_library(NNGD_LIBRARY debug nngd optimized nng HINTS ${NNG_LIBRARY_PATH})
message("what find_library(NNGD_LIBRARY...) obtained is: " ${NNGD_LIBRARY})
#----> what find_library obtained is: E:/vQt/EasyMessage/nng1.5.2/bin/nngd.lib

find_library(NNG_LIBRARY debug nngd optimized nng HINTS ${NNG_LIBRARY_PATH})
message("what find_library(NNG_LIBRARY...) obtained is: " ${NNG_LIBRARY})
#----> what find_library obtained is: E:/vQt/EasyMessage/nng1.5.2/bin/nng.lib

如果要链接到nngd.lib的话,find_library就一定要写成find_library(NNGD_LIBRARY...),不然的话,后面加什么debug,optimize都是没用的。

当然,你也可以组合下面这样的指令来完成同样的功能,

link_directories(${NNG_LIBRARY_PATH})
target_link_libraries(EasyMessage debug nngd) 

本文结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值