本节主要总结编译程序的时候使用了第三方库的情况,以调用开源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. 关于getAttribute()和setAttribute()的总结

    继续声明:欲练其功,必先自宫.博主正处在自宫阶段,修炼得道者多多指教. 最近在看<JavaScript DOM 编程艺术>这本书,看到了getAttribute()和setAttribut ...

  2. 洛谷 [P1608] 最短路计数

    最短路计数模版 本题要注意重边的处理 #include <iostream> #include <cstdio> #include <algorithm> #inc ...

  3. linux之tr

    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...

  4. MongoDB如何使用“”用户名和密码“”

    在去年的 DB 勒索事件之后, 不少的同学开始加强 Mongodb 的安全性, 其中一种办法就是设置复杂的密码. 那么问题来了, 如果设置的密码里包含一些如 “@”, “:” 一样的特殊字符怎么办? ...

  5. compensation 在 spec 上的意義

    compensation 翻譯為補償, 之前觀念都認為補償都是正的, 原來補償也可以負的, 例子: 電池充電電流在 10 - 45 度為 1800 mA, 在 0 - 10 度時,jeita 補償 1 ...

  6. python subprocess 杀掉全部派生的子进程

     下面就是今天下午的研究成果.    发布系统需要响应用户的中断请求,需要在GET方法中杀掉由subprocess派生的子进程,刚开始直接用os.kill 发现子进程的子进程无法kill,谷歌了一些, ...

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

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

  8. LeetCode OJ-- Pow(x, n) **@

    https://oj.leetcode.com/problems/powx-n/ 二分法 class Solution { public: double pow(double x, int n) { ...

  9. 怎么把一个整数转化为3个十六进制字节 delphi

    如何把一个整数转化为3个十六进制字节 delphi比如把整数149259(都是6位数据整型数) 转换为十六进制为2470B然后再分开为三个字节02 47 0B,求实现代码示例var ID: Integ ...

  10. Delphi Integer 转成单字节

    整形不能超过256 b:=Byte(StrToInt(n)); var   s: string;   b: Byte; begin   s := Edit1.Text;   b := Byte(Str ...