Cmake学习笔记(四)find类指令 以FIND_PACKAGE()为例

Cmake Find类指令

以FIND_PACKAGE()为例,我们用OpenCV为实例来看

我们需要为工程设置依赖的头文件和库时,往往需要以下方法

include_directiories(../include)
target_link_libraries(proTest ../OpenCV)

但是,opencv需要以来的动态库有时非常多,那我们一个个路径来配置么,肯定会比较麻烦,这时就会需要FIND_PACKAGE。先看实际应用怎么写,我们

set(OpenCV_DIR "D:\\opencv\\opencv\\build\\x86\\vc12\\lib\\")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(curltest ${OpenCV_LIBRARY})

首先设置opencv的安装路径,紧接着,通过find_package来自动查找,包含的动态库和头文件所需信息,注意OpenCV是cmake预置变量,内部客人,在linux下一定注意大小写。

Cmake会根据你配置的路径,文件夹中去OpenCVConfig.cmake,OpenCV-config.cmake 两个文件,进而确定你要引入的opencv头文件和库函数在哪里

对OpenCV还有一些有些变量,对编写CmakeList有用,必如OpenCV_FOUND可以用来标记是否找到响应文件和信息。
那我们CmakeList就可以改写成

project(HELLO)
set(SRC_LIST CmakeHelloWord.cpp)
#set (CMAKE_PREFIX_PATH "D:\\QT\\5.8\\msvc2015\\")

add_executable(hello ${SRC_LIST})

set(OpenCV_DIR "D:\\opencv\\opencv\\build\\x86\\vc12\\lib\\")
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
MESSAGE(STATUS "OpenCV_VERSION: ${OpenCV_VERSION}")
MESSAGE(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(curltest ${OpenCV_LIBS})
else(OpenCV_FOUND)
message(FATAL_ERROR "OpenCV not found!")
endif(OpenCV_FOUND)

据说并不是所有的,预置变量都是_INCLUDE_DIRS 和 _LIBS,据说会有如下形式,待验证

  • (name)_FOUND
  • (name)_INCLUDE_DIR 或 (name)_INCLUDES
  • (name)_LIBRARY 或 (name)_LIBRARIES 或 (name)_LIBS
  • (name)_DEFINITIONS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值