cmake介绍 VS2010+CMake重编译opencv2.4.10 Windows下利用CMake和VS2013编译OpenCV VS2012中使用OpenCV-3.0.0的动态链接库和静态链接库 CMake 入门实战 CMake 简介和 CMake 模板

1. cmake介绍

1.1 cmake用途

       CMake的用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件。譬如,如果一个项目需要在Windows上用VS编译,在Linux上用make编译,在OS X上用XCODE,那么按以前的做法是在整个项目文件里看三个目录,分别放置VS的sln文件,Linux的makefile,OS X的XCODE,然后让不同需求的人到相应的目录用自己需要的工程文件(这看起来没有什么不好似乎)。有了CMake以后,就不需要这三个目录了,只要有一个给CMake读的文件,然后CMake的UI上会需要用户选择目标平台,这样CMake就会生成目标平台上的工程文件。举例,如果用户选的是VS2005平台,那么CMake就会在源代码目录下生成供VS2005使用的sln文件;如果是make,就会生成makefile等等。

1.2   cmakelist 和 makefile

  • gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
  • 当你的程序只有一个源文件时,直接就可以用gcc命令编译它。
  • 但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大
  • 所以出现了make工具, make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
  • makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。
  • makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
  • makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。
  • 这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
  • 可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。
  • 到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。
  • 然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形
       为什么使用makefile:对于一个大型软件,其编译、维护是一个复杂而耗时的过程。它涉及到大量的文件、目录,这些文件可能是在不同的时间、由不同的人、在不同的地方分别写的,其中一些是程序,有些是数据,有些是文档,有些是衍生文件。甚至参与开发的人员也不一定清楚所有文件的细节,包括如何处理它们。此外,构成软件的文件数目可能达到成百上千,甚至成千上万个,开发过程中当修改了少量几个文件后,往往只需要重新编译、生成少数几个文件。有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。
Cmake是用来makefile的一个工具入所有源文件之后,自动生成makefile。
cmake介绍
VS2010+CMake重编译opencv2.4.10
Windows下利用CMake和VS2013编译OpenCV
VS2012中使用OpenCV-3.0.0的动态链接库和静态链接库
CMake 入门实战
CMake 简介和 CMake 模板2.  Windows下利用CMake和VS2013编译OpenCV
2.1 为什么要编译?

        为了在调试时可以跟踪进入到源码中,我们需要重新编译生成.dll和.lib文件,这样替换掉opencv提供的.dll和.lib文件,就可以解决这个问题。        

       本来opencv提供的动态链接库就已经是可以用的,但是在调试过程中,有时候想要查看源码,而那些却被封装好了,F11根本进不去,这样就不得不翻根目录下的.cpp文件来看了,但这样做比较麻烦,心里总是不爽,自然而然就要想点偏方了。

       多数情况下,能够直接使用OpenCV自带的库文件,可是假设是为了方便调试:方便调试opencv源代码或者为了与某些库兼容,还是须要又一次编译opencv的源代码。

2.2 重编译得到了什么?

        新产生的动态链接库(.dll和.lib)

2.3 编译步骤

1)下载并安装CMake;

2)用CMake工具生成OPENCV工程项目;  (VS下为.sln文件)

3)用VS2010代开工程项目,重新编译得到动态链接库(.dll和.lib文件);

4)应用上述文件新建工程,并F11跟踪调试代码。

       找到Cmake编译后产生的 .sln 文件 ,用VS2010打开。在DebugRelease模式下,分别编译一次(发现ALL_BUILD,右键并Bulid)。.lib文件在D:opencv_cmakelib的Debug和Relesae下,.dll文件在D:opencv_cmakebin的Debug和Relesae下。在新建测试项目之前,要将.dll所在的路径添加到环境变量中(记得删除原有opencv边境变量路径)。
 
2.4 编译过程与方法参考:
 
 
 
 
 
 
参考于:
知乎:辉常哥