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()的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(二六九)CMake的message输出信息

C++学习(二六八)CMake命令和变量的大小写

C++学习(二六四)RTTI

C++学习(三二六)osgGA::PointerData的作用

C++学习(四二六)Android的logcat

C++学习(二六三)dirty hack