C++学习(二六七)find_package() find_library()
Posted hankern
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习(二六七)find_package() find_library()相关的知识,希望对你有一定的参考价值。
FIND_PACKAGE( <name> [version] [EXACT] [QUIET] [NO_MODULE] [ [ REQUIRED | COMPONENTS ] [ componets... ] ] )
如果编译软件使用了外部库,事先并不知道它的头文件和链接库的位置。得在编译命令中加上包含它们的查找路径。CMake使用 find_package 命令来解决这个问题。
find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到。
find_library (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
简单写法为:
find_library (<VAR> name1 [path1 path2 ...])
#在指定目录下搜索一个库, 保存在变量MY_LIB中
find_library(MY_LIB libmylib.a ./)
寻找系统库,比如:寻找 log库
find_library( log-lib log )
指定路径寻找库,比如:在当前目录下寻找libmylib.so动态库。
find_library(my_lib libmylib.so ./)
find_library找不到库文件原因分析:
find_library (
AAA_BBB
NAMES libosgd.a
HINTS ${CUSTOM_LIBRARY_PATH} D:/OSG_OSGEARTH_android/lib64 D:/OSG_OSGEARTH_Android
PATHS ${CUSTOM_LIBRARY_PATH} D:/OSG_OSGEARTH_Android/lib64 D:/OSG_OSGEARTH_Android
NO_DEFAULT_PATH
)
正常是能找到的,但是因为使用了交叉编译工具链,导致找不到AAA_BBB-NOTFOUND,具体是设置了CMAKE_SYSROOT或CMAKE_FIND_ROOT_PATH,导致查找路径都是在此路径下,解决办法为:
在后增加NO_CMAKE_FIND_ROOT_PATH即可。
find_library (
AAA_BBB
NAMES libosgd.a
HINTS ${CUSTOM_LIBRARY_PATH} D:/OSG_OSGEARTH_Android/lib64 D:/OSG_OSGEARTH_Android
PATHS ${CUSTOM_LIBRARY_PATH} D:/OSG_OSGEARTH_Android/lib64 D:/OSG_OSGEARTH_Android
NO_DEFAULT_PATH
NO_CMAKE_FIND_ROOT_PATH
)
以上是关于C++学习(二六七)find_package() find_library()的主要内容,如果未能解决你的问题,请参考以下文章