• Linux的库文件findpackage


    https://www.jianshu.com/p/46e9b8a6cb6a

    find_package用法

    使用如下方式查找Caffe库:

    find_package(Caffe REQUIRED)

    如果找到Caffe库,就可以在接下来的语句中使用Caffe_INCLUDE_DIRSCaffe_LIBRARIES这两个变量,比如


    find_package原理

    首先明确一点,cmake本身不提供任何搜索库的便捷方法,所有搜索库并给变量赋值的操作必须由cmake代码完成,比如下面将要提到的FindXXX.cmake和XXXConfig.cmake。只不过,库的作者通常会提供这两个文件,以方便使用者调用。

    find_package采用两种模式搜索库:

    • Module模式:搜索CMAKE_MODULE_PATH指定路径下的FindXXX.cmake文件,执行该文件从而找到XXX库。其中,具体查找库并给XXX_INCLUDE_DIRSXXX_LIBRARIES两个变量赋值的操作由FindXXX.cmake模块完成。
    • Config模式搜索XXX_DIR指定路径下的XXXConfig.cmake文件,执行该文件从而找到XXX库。其中具体查找库并给XXX_INCLUDE_DIRSXXX_LIBRARIES两个变量赋值的操作由XXXConfig.cmake模块完成。

    两种模式看起来似乎差不多,不过cmake默认采取Module模式,如果Module模式未找到库,才会采取Config模式。如果XXX_DIR路径下找不到XXXConfig.cmake文件,则会找/usr/local/lib/cmake/XXX/中的XXXConfig.cmake文件。总之,Config模式是一个备选策略。通常,库安装时会拷贝一份XXXConfig.cmake到系统目录中,因此在没有显式指定搜索路径时也可以顺利找到。

    在我遇到的问题中,由于Caffe安装时没有安装到系统目录,因此无法自动找到CaffeConfig.cmake,我在CMakeLists.txt最前面添加了一句话之后就可以了。

    set(Caffe_DIR /home/wjg/projects/caffe/build)   #添加CaffeConfig.cmake的搜索路径
    

     

    find_package(Caffe REQUIRED)
    

     

    if (NOT Caffe_FOUND)
    

        message(FATAL_ERROR "Caffe Not Found!")
    

    endif (NOT Caffe_FOUND)
    

     

    include_directories(${Caffe_INCLUDE_DIRS})
    

     

    add_executable(useSSD ssd_detect.cpp)
    

    target_link_libraries(useSSD ${Caffe_LIBRARIES})
    

    其实关于find_package还有许多知识点,可惜我也没能全部掌握。XXXConfig.cmake的默认搜索路径也不止一个,它们有详细的优先级顺序。对于库的开发者来说,如何生成FindXXX.cmake或XXXConfig.cmake文件更是一个复杂工程,需要了解更多的知识,希望以后有机会再深入了解。



    作者:金戈大王
    链接:https://www.jianshu.com/p/46e9b8a6cb6a
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Linux文件权限管理
    Linux用户权限管理
    压缩,解压缩 和tar详细介绍
    grep基本详细使用
    Vim文本编辑器详细用法
    Linux命令查找文件目录
    Linux文件增删改
    Linux目录管理
    Linux修改主机名
    Linux创建高级用户并删除
  • 原文地址:https://www.cnblogs.com/tangyuanjie/p/14028226.html
Copyright © 2020-2023  润新知