若是程序中使用了外部库,事先并不知道它的头文件和连接库的位置,就要给出头文件和连接库的查找方法,并将他们连接到程序中。ios
FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] [[REQUIRED|COMPONENTS] [componets...]])
find_package(
具体查找路径依次为CMake:
模块模式ui
配置模式code
<NAME>_FOUND <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES <NAME>_LIBRARIES or <NAME>_LIBRARIES or <NAME>_LIBS <NAME>_DEFINITIONS
注意大部分包的这些变量中的包名是全大写的,如 LIBFOO_FOUND ,有些包则使用包的实际大小写,如 LibFoo_FOUNDget
若是找到这个包,则能够经过在工程的顶层目录中的CMakeLists.txt 文件添加 include_directories(
建立t4目录添加cmake目录与main.cpp与CMakeList.txt文件io
建立cmake目录添加FindOpenCV.cmake文件。编译
CMakeList.txtopencv
cmake_minimum_required(VERSION 2.8) PROJECT (HELLO) SET(SRC_LIST main.cpp) INCLUDE_DIRECTORIES(cmake) SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) #在${CMAKE_MODULE_PATH}中添加包含FindOpenCV.cmake目录 FIND_PACKAGE(OpenCV) #获取OPENCV_FOUND OPENCV_INCLUDE_DIR OPENCV_LIBRARIES INCLUDE_DIRECTORIES(${OPENCV_INCLUDE_DIR}) ADD_EXECUTABLE(hello ${SRC_LIST}) TARGET_LINK_LIBRARIES(hello ${OPENCV_LIBRARIES})
main.cpprequire
#include <iostream> #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("../timg.jpeg"); if (!image.empty()) { cv::imshow("image", image); cv::waitKey(-1); } else { std::cout << "Can not get image." << std::endl; } return 0; }
编写FindHello.cmake与CMakeList.txt文件,将CMAKE工程小结所安装的hello连接至主函数,调用HelloFunc()函数输出相应内容:
给出main.c 文件:
#include <hello/hello.h> int main() { HelloFunc(); return 0; }