find_library官方的解释在这里,
find_library — CMake 3.23.2 Documentationhttps://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)
本文结束。