• cmake 入门(1)


    2.正文

    2.1 模板

    #cmake 版本检查
    cmake_minimum_required (VERSION 2.8)
    
    #项目名字
    project (greenReplace)
    
    #设置c++版本
    set(CMAKE_CXX_STANDARD 17)
    set(OpenCV_DIR /root/download/opencv-master/build/)
    
    #开启debug
    set(CMAKE_BUILD_TYPE "Debug")
    #release
    #SET(CMAKE_BUILD_TYPE "Release")
    
    #寻找openCV
    find_package( OpenCV REQUIRED ) //通过OpenCV.cmake完成
    
    #设置头文件路径 -I
    include_directories("/usr/include")
    include_directories( ${OpenCV_INCLUDE_DIRS} )
    include_directories("/usr/local/include/opencv4")
    
    #设置要动态连接库的目录
    link_directories("/usr/lib") 
    
    #将当前目录下所有.c cpp .h .hpp 文件放入  SRC变量中
    aux_source_directory(. SOURCES_FILES)
    
    #将所有源文件编译成greenReplace
    add_executable(greenReplace ${SOURCES_FILES})
    
    
    #链接
    target_link_libraries(greenReplace ${OpenCV_LIBS})
    

    target_link_libraries是用来把一个tager做链接库的,如下使用:

    target_link_libraries(test libwebsockets.so libjansson.so)
    

    和下面的方式等效

    target_link_libraries(test -lwebsockets -ljansson)
    

    注意: 链接pthread的时候,应该直接使用 pthread(g++/gcc 对于该选项除了link 会添加一些宏)而不是-lpthread

    //等效于-ptherad
    target_link_libraries(test pthread)
    

    2.3 find_package的细节

    通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件

    find_package(OpenCV
      [version] [EXACT]      # 可选项,最小版本或者确切所需版本
      [REQUIRED]             # 可选项,如果找不到所需库,报错
      [COMPONENTS <libs>...] # 所需的库名称,比如说. "date_time" 代表 "libboost_date_time"
      )     
    

    运行完后可以得到很多变量,下面列了一些主要的

    OpenCV_FOUND            - 如果找到了所需的库就设为true
    OpenCV_INCLUDE_DIRS     - OpenCV头文件搜索路径
    OpenCV_LIBRARY_DIRS     - OpenCV库的链接路径
    OpenCV_LIBRARIES        - OpenCV库名,用于链接到目标程序
    OpenCV_VERSION          - 版本号
    OpenCV_LIB_VERSION      - 某个库的版本
    

    find_package()得原理是/usr/local/share/cmake-xxx/Modules去找一个对应的库的脚本文件,这个脚本文件去搜索对应的头文件和库,并设置一下变量出来使用

    官方说明中,link_directories 要放在add_executable或add_libraries前,否则会导致ld cannot find的错误

    3.ref

    3.1 官方guide
    3.2 cmake 添加头文件目录,链接动态、静态库
    3.2 find_package,寻找boost的实例
    3.3 cmake 命令速查
    3.3 Cmake之深入理解find_package()的用法

  • 相关阅读:
    前端编程规范记录
    搬砖工坑爹教程
    JS的模块化编程学习之旅
    后端开发遇到的问题
    git学习中遇到的疑难杂症
    微信小程序填坑之旅
    详解Redis中两种持久化机制RDB和AOF
    redis系列:RDB持久化与AOF持久化
    Java中判断字符串是否为数字
    @Aspect 注解使用详解
  • 原文地址:https://www.cnblogs.com/ishen/p/13154925.html
Copyright © 2020-2023  润新知