本节主要总结编译程序的时候使用了第三方库的情况,以调用开源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. 检测字符串当中x与o的数目是否相等

    题目如上 答案 function XO(str) { var arr = str.split(""), xCount = , oCount = ; var reX = /x/i, ...

  2. 关于微信小程序post请求数据的坑

    在post请求数据的时候,发现数据没有发送给后台,需要在请求头里加"Content-Type": "application/x-www-form-urlencoded&q ...

  3. input file 修改按钮名称

    解决方法: 1)页面上放个隐藏的<input type=“file” /> 2)然后加上一个文本input(type="text")和一个按钮input(type=&q ...

  4. GC+JVM

    1.内存管理模型 ①以对象的方式管理内存,每个对象占据内存中连续的一段,分配在堆中.对象引用可以指向堆中的其他对象.非基本数据类型的对象等价于数据引用. ②基于栈和堆的内存管理都是动态分配,即在运行时 ...

  5. 無法使用 adb push file,Read-only file system

    adb root adb remount adb push xxx /system/etc/xxx failed to copy 'xxx' to '/system/etc/xxx': couldn' ...

  6. hdu 2242 无向图/求用桥一分为二后使俩个bcc点权值和之差最小并输出 /缩点+2次新图dfs

    题意如标题所述, 先无向图缩点,统计出每个bcc权,建新图,然后一遍dfs生成树,标记出每个点(新图)以及其子孙的权值之和.这样之后就可以dfs2来枚举边(原图的桥),更新最小即可. 调试了半天!原来 ...

  7. ios开发某个页面横不过来屏幕的时候

    某一个页面需要横屏,其他的页面任然保持竖屏需要以下关键的几个步骤: 1.修改系统代理方法的返回值 -(UIInterfaceOrientationMask)application:(UIApplica ...

  8. (4)ASP.NET内置对象1

    一.Response 把数据从服务端发送到客户端 Response.Write() 在页面上输出数据 Response.WriteFile(@"F:\WriteFile.txt") ...

  9. Linux笔记:crond

    crontab中列出需要执行的命令及执行时间.由于指定的日期Day与星期Week不是相互包含的关系,而是有相交也有不相交的时间.当日期数与星期数均指定为确定值的时候,指令的执行时间到底是什么样的,之前 ...

  10. Scala之Future超时

    最近在开发中使用akka http进行请求,返回的是一个future,并且要对future进行超时设置,不知怎么设置,因此学习了下. 一.Future阻塞 首先,scala中的future不支持内置超 ...