博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ubuntu16.04 Cmake学习二
阅读量:7234 次
发布时间:2019-06-29

本文共 2709 字,大约阅读时间需要 9 分钟。

本节主要总结编译程序的时候使用了第三方库的情况,以调用开源opencv-2.4.9为例子,具体安装详见。

工程文件目录创建

/home/bmi-zc/project:

|—CMakeLists.txt 顶层CMakeLists
|
|—bin
|
|—include
|    test.h
|    ceshi.h     
|
|—lib
|
|—src
  |  CMakeLists.txt
  |  
  |—main
  |  CMakeLists.txt
  |  main.cpp
  |
  |—test
    CMakeLists.txt
    test1.cpp
    test2.cpp  
    ceshi.cpp

程序清单

test.h

#ifndef INCLUDE_TEST_H    #define INCLUDE_TEST_H    #include 
void t1(); void t2(); #endif /*INCLUDE_TEST_H*/

ceshi.h

#ifndef INCLUDE_CESHI_H   #define INCLUDE_CESHI_H   #include 
#include
int t3(); #endif /*INCLUDE_CESHI_H*/

test1.cpp

#include "/home/bmi-zc/project/include/test.h"    void t1()    {    printf("this is t1()\n");       }

test2.cpp

#include "/home/bmi-zc/project/include/test.h"    void t2()    {    printf("this is t2()\n");    }

ceshi.cpp

#include "/home/bmi-zc/project/include/ceshi.h"    using namespace cv;    int t3()    {    Mat image;    image = imread("/home/bmi-zc/project/test1.jpg", 1);    if (!image.data)    {    printf("No image data\n");    return -1;    }    namedWindow("Display Image", CV_WINDOW_AUTOSIZE);    imshow("Display Image", image);    waitKey(0);    return 0;    }

main.cpp

#include "/home/bmi-zc/project/include/test.h"      int main()      {      t1();      t2();    t3();      return 0;      }
  • 这一节里,因为opencv主要采用C++编写,所以我们的编译器变成了g++,在建立算法程序后缀需要用.cpp。
  • 这一节将头文件都统一整理在了test.h和ceshi.h,其中test.h里是c语言库标准头文件,ceshi.h里是我们要用到的opencv的头文件。

CMakeLIsts.txt清单

/home/bmi-zc/project/CMakeLists.txt

cmake_minimum_required(VERSION 3.5)    PROJECT(TEST)    ADD_SUBDIRECTORY(src)

/home/bmi-zc/project/src/CMakeLists.txt

ADD_SUBDIRECTORY(main)    ADD_SUBDIRECTORY(test)

/home/bmi-zc/project/src/test/CMakeLists.txt

SET(CMAKE_CXX_COMPTLER g++)  //编译器采用g++    SET(SRC_LIST test1.cpp test2.cpp ceshi.cpp)    INCLUDE_DIRECTORIES(/home/bmi-zc/opencv-2.4.9/include/opencv)   //opencv头文件目录    INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)    SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)    ADD_LIBRARY(libtest STATIC ${SRC_LIST})

/home/bmi-zc/project/src/main/CMakeLists.txt

SET(SRC_LIST main.cpp)    INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)    FIND_PACKAGE(OpenCV REQUIRED)    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)    ADD_EXECUTABLE(main ${SRC_LIST})    link_directories(${PROJECT_SOURCE_DIR}/lib)    TARGET_LINK_LIBRARIES(main ${OpenCV_LIBS})    TARGET_LINK_LIBRARIES(main libtest)
  • 重点介绍find_package命令

    find_package可以被用来在系统中自动查找配置构建工程所需的程序库。CMake自带的模块文件里有大半是对各种常见开源库的find_package支持。

编译&运行

  • 回到工程根目录,/home/bmi-zc/project

    cmake .
    make

  • 进入bin文件夹,执行main可执行文件

    cd bin
    ./main

876125-20160926095705031-798858073.png

分享推送

比较优秀的博文:

  1. CMake使用进阶,作者linghutf,写于2016年6月。

转载于:https://www.cnblogs.com/xsfmg/p/5908064.html

你可能感兴趣的文章
执行shell脚本提示“-bash: ./checkP.sh: /bin/sh^M: bad interpreter: No such file or directory”解决方法...
查看>>
内核工作队列【转】
查看>>
[Java并发编程(五)] Java volatile 的实现原理
查看>>
读书笔记,《刻意练习》,第一章,有目的的练习
查看>>
sqlserver导出为EXcel--CSV格式
查看>>
UVA 357 Let Me Count The Ways(全然背包)
查看>>
wpf z
查看>>
Android 学习笔记之Bitmap位图虽触摸点移动
查看>>
Android项目——传感器的使用
查看>>
ajax不运行success回调而是运行error回调
查看>>
Android View体系(一)视图坐标系
查看>>
WeUI移动页面实现时间选择器(年-月-日-时-分)
查看>>
采用config方式灵活配置我们的Quarz.net中的Job,Trigger
查看>>
Docker管理工具-Swarm部署记录
查看>>
2015 计蒜之道 初赛(4)爱奇艺的自制节目(枚举 贪心)
查看>>
小程序页面可以放置转发按钮,同时开放了微信运动步数背景音乐播放等更多基础能力...
查看>>
如何实现dede首页栏目文章指定调用
查看>>
bbed改动undo段状态(ORA-01578)
查看>>
vijos- P1383盗窃-黑珍珠 (python + 代码优化)
查看>>
python之 前端HTML/CSS基础知识学习笔记
查看>>