本节主要总结编译程序的时候使用了第三方库的情况,以调用开源opencv-2.4.9为例子,具体安装详见http://www.cnblogs.com/xsfmg/p/5900420.html

工程文件目录创建

/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 <stdio.h>
void t1();
void t2();
#endif /*INCLUDE_TEST_H*/

ceshi.h

   #ifndef INCLUDE_CESHI_H
#define INCLUDE_CESHI_H
#include <cv.h>
#include <highgui.h>
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

分享推送

比较优秀的博文:

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

    http://linghutf.github.io/2016/06/16/cmake/

ubuntu16.04 Cmake学习二的更多相关文章

  1. Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda

    Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda Ubuntu16.04安装 参考https://blog.csdn.net/flyy ...

  2. ubuntu16.04深度学习环境的配置【转】

    本文转载自:https://my.oschina.net/u/3837179/blog/1920756 在ubuntu中配置GPU的深度学习环境相较于win问题要多很多,这几天琢磨了一下Ubuntu下 ...

  3. ubuntu16.04深度学习环境配置

    https://www.lizenghai.com/archives/14651.html https://blog.csdn.net/qq_40936141/article/details/8119 ...

  4. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  5. Ubuntu16.04安装后开发工作的配置

    由于多次安装Ubuntu16.04用于学习,其中出了多次问题.每次找参考文件太麻烦,于是写了这篇总结,方便之后备用. 一.精简系统,删除不常用软件 参考资料来自:https://blog.csdn.n ...

  6. 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动

    前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...

  7. 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3

    紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...

  8. 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow

    深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...

  9. 深度学习caffe:Ubuntu16.04安装指南(1)

    caffe [CPU ONLY] 2017-01-15 最简单的安装配置方式: 不用GPU加速,使用OPENCV2.4图像库, 这是根据官方教程(链接如下)简化而得到. Ubuntu 16.04 or ...

随机推荐

  1. IDEA 注册问题,创建 和 删除项目

    目录 .....2016.3/2017.1 IDEA 注册码 .....IDEA 创建项目 .....IDEA 删除项目 IDEA 注册码 复制使用别人的注册码,启动选择如下: 复制粘贴如下代码: 这 ...

  2. iOS - 倒计时封装

    +(NSString *)countdownStartTime:(NSString *)startTime{ NSString *TIME = [startTime substringToIndex: ...

  3. libc++abi.dylib`__cxa_throw: 使用[AVAudioPlayer play]会产生__cxa_throw异常

    libc++abi.dylib`__cxa_throw: 使用[AVAudioPlayer play]会产生__cxa_throw异常 开发中遇到一个奇怪的异常.我调用AVAudioPlayer pl ...

  4. Iframe载入页面 及 跳转页面

    原文发布时间为:2009-05-05 -- 来源于本人的百度文章 [由搬家工具导入] 第一个文件 frame1.html <!DOCTYPE html PUBLIC "-//W3C// ...

  5. VBCodeProvider .net compiler service interface or something like that

    https://msdn.microsoft.com/zh-cn/library/microsoft.visualbasic.vbcodeprovider%28v=vs.110%29.aspx ref ...

  6. Ubuntu FireFox的“后退”按钮与Backspace键

    我们都知道,大部分的网页浏览器和窗口管理器的“后退”按钮是和Backspace键关联的,这样会极大的方便并加快我们浏览时的翻页速度(我一直是左手 放在键盘上按快捷键,右手鼠标的姿势找文件和看网页的,省 ...

  7. 语义分割丨PSPNet源码解析「训练阶段」

    引言 之前一段时间在参与语义分割的项目,最近有时间了,正好把这段时间的所学总结一下. 在代码上,语义分割的框架会比目标检测简单很多,但其中也涉及了很多细节.在这篇文章中,我以PSPNet为例,解读一下 ...

  8. Akka 和 μJavaActors入门

         Akka和μJavaActorsμJavaActors均是java的Actor库,其中Akka提供了叫为完整的Actor开发框架,较为庞大,学习成本很高,μJavaActors 是一个轻量级 ...

  9. noip2013/day1/1/转圈游戏

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从  ...

  10. Windows 远程桌面文件传输的方法

    实现电脑的远程连接以后,很多时候会需要进行主机间的文件传输,这个时候就可以用系统自带的远程连接里的磁盘映射来完成,详细如下: 远程桌面程序内置了映射磁盘的功能,通过这个功能可以实现远程登录服务器时自动 ...