zoukankan      html  css  js  c++  java
  • CMake

    make工具通过调用makefile文件中的命令便可以对大型程序进行编译,而makefile文件中就包含了调用gcc去编译多个源文件的命令。如果我们的程序是跨平台的,如果换个平台makefile又要重新修改,这会很麻烦,所以就出现了cmake这个工具,通过cmake我们就可以快速创建出不同平台的makefile文件。而cmake又是根据CMakeLists.txt来生成makefile文件。为了编译一个大型程序,你首先编写CMakeLists.txt。然后,通过cmake命令就可以生成makefile文件。然后通过make命令就可以使用这个makefile文件从而生成可执行文件。

    CMake是一个跨平台的编译自动配置工具,它使用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件。它可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。

    CMake可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake支持in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake也支持静态与动态程式库的建构。CMake是一个比make更高级的编译配置工具。

             CMake的组态档取名为CMakeLists.txt。组态档是用一种建构软件专用的特殊编程语言写的CMake脚本。文件CMakeLists.txt需要手工编写,也可以通过编写脚本进行半自动的生成。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。

             CMake主要特点:(1)、开放源代码,使用类BSD许可发布;(2)、跨平台,并可生成native编译配置文件,在Linux/Unix平台,生成makefile;在苹果平台,可以生成xcode;在windows平台,可以生成msvc的工程文件;(3)、能够管理大型项目;(4)、简化编译构建过程和编译过程,CMake的工具链非常简单:cmake+make;(5)、高效率;(6)、可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。

    CMakeLists.txt中命令不区分大小写,参数和变量区分大小写,注释采用#号,变量使用${xxx}引用,

    cmake --version  检查cmake是否安装以及版本号

    apt-get install cmake  安装cmake

    add_executable( helloSLAM helloSLAM.cpp )  //添加可执行文件
    add_library(hello libHelloSLAM.cpp)  //添加静态库

    add_library(hello_shared SHARED libHelloSLAM.cpp)  //添加共享库

    Linux中库分为静态库和共享库两种,静态库以.a作为后缀,共享库以.so为后缀,静态库每次被调用都会生成一个副本,而共享库则只有一个副本。

    find_package

    find_package可以帮助解决整个工程的依赖问题,自动把头文件和动态链接文件配置好

    find_package( Sophus REQUIRED )
    include_directories( ${Sophus_INCLUDE_DIRS} )
    add_executable( useSophus useSophus.cpp )
    target_link_libraries( useSophus ${Sophus_LIBRARIES} )
    git clone https://github.com/OctoMap/octomap  

    mkdir build

    cd build

    cmake ..

    make

    sudo make install 将程序安装至系统中

  • 相关阅读:
    CSU 1554 SG Value (集合类的学习)
    CSUOJ 1542 线段树解决括号反向问题
    POJ 1679 判最小生成树的不唯一性 或 利用次小生成树求解
    HDU1074 Doing Homework 状态压缩dp
    POJ 2479 两段连续最大和
    HDU1024 多段最大和 DP
    HDU 4803 贪心
    POJ 3469 网络流最小割
    SPOJ ARCTAN
    COJ 1163 乘法逆元的求解
  • 原文地址:https://www.cnblogs.com/larry-xia/p/11518520.html
Copyright © 2011-2022 走看看