find_package 总结

本文参考:“轻松搞定CMake”系列之find_package用法详解

原理

find_package 即在指定目录CMAKE_MODULE_PATHCMAKE_PREFIX_PATH查找对应的cmake文件。

find 模式

  • Module模式(默认):查询Findxxx.cmake配置文件, 在CMAKE_MODULE_PATH 目录
  • Config模式:查询xxxConfig.cmake or <lower-case-package-name>-config.cmake配置文件,在xxx_DIRCMAKE_PREFIX_PATH目录

如果Module模式失败则自动转入Config模式。如果Config失败,则find_package 失败。

Config模式路径查找顺序

  1. 名为<PackageName>_DIR的CMake变量或环境变量路径(默认为空)
  2. 名为CMAKE_PREFIX_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH的CMake变量或环境变量路径
  3. PATH环境变量路径

findxxx.cmake配置文件大众规则(规则、变量自定义)

xxx_FOUND:BOOL 类型,如果成功则为true
xxx_INCLUDES: 模块的头文件位置
xxx_LIBRARIES:库文件位置

demo展示(add)

findadd.cmake or addConfig.cmake

message("Find add:"  $ENV{path})
message("PROJECT_SOURCE_DIR:"${PROJECT_SOURCE_DIR})
#find headers
find_path(add_INCLUDES
        NAMES add.h 
        PATHS ${PROJECT_SOURCE_DIR}/add ${PROJECT_SOURCE_DIR}/add1)

#find lib
find_library(add_LIBRARIES 
            NAMES add.lib
            PATHS ${PROJECT_SOURCE_DIR}/add/lib ${PROJECT_SOURCE_DIR}/add1/lib)


message("add_INCLUDES="${add_INCLUDES})
message("add_LIBRARIES="${add_LIBRARIES})

if(add_LIBRARIES AND add_LIBRARIES)
    set(add_FOUND TRUE)
endif()


message("add_FOUND:"${add_FOUND})

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(mylib)


#module 模式
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/)

#config模式
set(add_DIR ${PROJECT_SOURCE_DIR}/cmake/)
message("CMAKE_MODULE_PATH=" ${CMAKE_MODULE_PATH})
find_package(add)

if(add_FOUND)
message("add package find")
else(add_FOUND)
message("add package not find")
endif(add_FOUND)

结果展示

在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值