zoukankan      html  css  js  c++  java
  • Cmake

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。

    他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

    只是 CMake 的组态档取名为 CMakeLists.txt。

    Cmake 并不直接建构出最终的软件(如exe文件、库文件),而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

    这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里).

    Cmake:src——>Makefile

    make:Makefile/cmakelist.txt——>.vcproj——>.lib  .dll  .exe

    生成解决方案的过程是先按照cmakelist.txt生成项目对应的.vcproj文件,进而通过.vcproj中的配置来编译生成目标文件。

    1. cmake可以将源码生成cmakelist.txt。选择源码目录其实就相当于选择项目名
    2. 打开解决方案后,ALL_Build全部生成解决方案,这中间会生成源码所有项目的解决方案,包括所有的.ib .dll .exe。
    3. 然后选择INSTALL 生成,这个过程仅仅是将源码中的头文件和编译生成的库文件集中在install 文件中,供用户直接配置VS。

    cmake opencv源码之后,会生成opencv.sln直接在cmake结束界面进去后,VS能看到opencv.sln解决方案下ALL_BUILDINSTALL;生成——批生成——选择ALL_BUILD和INSTALL——生成,会在install目录下生成bin二进制文件夹(存放生成的所有的exe和dll),lib文件夹(所有的编译生成bin文件夹过程中生成的lib文件),include文件夹(所有bin文件夹中依赖的头文件)。这个bin文件夹是核心,需要配置到环境变量;其他的lib和include配置到VS的包含目录

    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。

    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

    cmake的界面,勾选ENABLE CUDA就会将cuda和gpu加入编译后的工程中的预处理器定义中,工程一旦生成不能再随意改变预处理器定义,否则会报错。也就是说:cmake界面添加一些库的路径其实就是添加预处理器定义并将相关库和文件一起编译到工程中。比如要选择darknet_GPU,只需勾选ENABLE cuda,进行cmake即可。同理,如果是需要opencv支持,则勾选Enable Opencv。

    2.5 编译过程与方法参考:

    VS2010+CMake重编译opencv2.4.10

    Windows下利用CMake和VS2013编译OpenCV

    VS2012中使用OpenCV-3.0.0的动态链接库和静态链接库

  • 相关阅读:
    C# 关键字总结
    C# .NET、Mono、跨平台 的简单介绍
    Leetcode---剑指Offer题15---二进制中1的个数
    Leetcode---剑指Offer题14---剪绳子
    C# string方法总结
    Unity XML的使用
    C# 文件类总结 File、Directory、FileStream、StreamWriter、StreamReader
    自定义博客园---固定推荐反对到右下角
    自定义博客园---返回顶部
    CentOS 安装Python3.x常见问题
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725223.html
Copyright © 2011-2022 走看看