• CMake--模块的使用和自定义模块


    1.链接外部库

    如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方法,并将他们链接到程序中。

    FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] 
    [[REQUIRED|COMPONENTS] [componets...]])
    

    1) find_package()的查找路径

    find_package()命令首先会在模块路径中寻找 一个事先编译好的Find.cmake文件,而且一般官方给出了很多,不需要自己编写这是查找库的一个典型方式。
    具体查找路径依次为CMake:

    模块模式

    • ${CMAKE_MODULE_PATH}中的所有目录。
    • 模块目录 /share/cmake-x.y/Modules/ 这称为。

    配置模式

    • ~/.cmake/packages/或/usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如库Opencv,它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmake或opencv-config.cmake)。

    2) *.cmake文件定义变量

    不管使用哪一种模式,只要找到.cmake,.cmake里面都会定义下面这些变量:

    <NAME>_FOUND
    <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES
    <NAME>_LIBRARIES or <NAME>_LIBRARIES or <NAME>_LIBS
    <NAME>_DEFINITIONS
    

    注意大部分包的这些变量中的包名是全大写的,如 LIBFOO_FOUND ,有些包则使用包的实际大小写,如 LibFoo_FOUND

    3)添加头文件与链接库文件

    如果找到这个包,则可以通过在工程的顶层目录中的CMakeLists.txt 文件添加 include_directories(_INCLUDE_DIRS) 来包含库的头文件,添加target_link_libraries(源文件 _LIBRARIES)命令将源文件与库文件链接起来。

    4) 链接OpenCV的例子

    创建t4目录添加cmake目录与main.cpp与CMakeList.txt文件

    创建cmake目录添加FindOpenCV.cmake文件。

    CMakeList.txt

    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.cpp

    #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;
    }
    

    2.自定义模块(作业)

    编写FindHello.cmake与CMakeList.txt文件,将CMAKE工程小结所安装的hello链接至主函数,调用HelloFunc()函数输出相应内容:

    给出main.c 文件:

    #include <hello/hello.h>
    int main()
    {
        HelloFunc();
        return 0;
    }
    
    
  • 相关阅读:
    PHP操作二进制字节数据
    Linux端口转发-rinted工具部署、配置、使用
    Netty学习(八)-Netty的心跳机制
    Navicat Premium 12破解方法
    App界面设计规范-字体规范
    PHP 扩展开发之Zephir
    rinetd 一个linux下的端口转发工具
    windows node版本管理工具nvm
    vue cli 常见问题汇总
    监听微信返回
  • 原文地址:https://www.cnblogs.com/narjaja/p/9533199.html
Copyright © 2020-2023  润新知