• 非常陌生的cmake


      CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

      CMake 可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程序库的建构。
    “CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

    历史

      CMake是为了解决美国国家医学图书馆出资的Visible Human Project专案下的Insight Segmentation and Registration Toolkit (ITK) 软件的跨平台建构的需求而创造出来的,其设计受到了Ken Martin开发的pcmaker所影响。pcmaker当初则是为了支援Visualization Toolkit这个开放源代码的三维图形和视觉系统才出现的,今日VTK也采用了CMake。在设计CMake之时,Kitware公司的Bill Hoffman采用了pcmaker的一些重要想法,加上更多他自己的点子,想把GNU建构系统的一些功能整合进来。CMake最初的实作是在2000年中作的,在2001年初有了急速的进展,许多改良是来自其他把CMake整合到自己的系统中的开发者,比方说,采用CMake作为建构环境的VXL社群就贡献了很多重要的功能,Brad King为了支援CABLE和GCC-XML这套自动包装工具也加了几项功能,奇异公司的研发部门则用在内部的测试系统DART,还有一些功能是为了让VTK可以过渡到CMake和支援(“美国Los Alamos国家实验室”&“洛斯阿拉莫斯国家实验室”)的Advanced Computing Lab的平行视觉系统ParaView而加的。

    组态档

    组态档是用一种建构软件专用的特殊编程语言写的CMake脚本。
    内建C语言、C++、Fortran、Java的自动相依性分析功能。
    经由CMake脚本语言支援SWIG、Qt、FLTK。
    内建对微软Visual Studio .NET和过去的Visual Studio版本的支援,可以产生后缀为.dsp、.sln和.vcproj的文档。
    用传统的时间标签侦测档案内容的改变。
    支援平行建构(在多台电脑上同时建构)
    在许多操作系统上进行跨平台编译,包括Linux、POSIX相容的系统(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系统)、Mac OS X和微软Windows 95/98/NT/2000/XP等。
    产生可以给Graphviz用的全局相依图。
    已经和Dart、CTest和CPack等软件测试和释出的工具整合。

    CMake 使用方法

    软件安装

    下载cmake
    Windows版本安装
    直接运行EXE
     
    LINUX版本的安装:
    安装cmake
    cmake-*.*.*tar.gz为下载下来的源码包
    tar xvf cmake-*.*.*.tar.gz
    cd cmake-*.*.*
    ./bootstrap
    make
    make install
    如果已经安装了cmake,想要安装新版本,则:
    cd cmake-*.*.*
    cmake .
    make
    make install

    使用方法

        CMake的所有的语句都写在一个叫:CMakeLists.txt的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关 的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。

        其基本操作流程为:

    1. $> ccmake directory
    2. $> cmake directory
    3. $> make

      其中directory为CMakeList.txt所在目录;

    • 第一条语句用于配置编译选项,如VTK_DIR目录 ,一般这一步不需要配置,直接执行第二条语句即可,但当出现错误时,这里就需要认为配置了,这一步才真正派上用场;
    • 第二条命令用于根据CMakeLists.txt生成Makefile文件
    • 第三条命令用于执行Makefile文件,编译程序,生成可执行文件

    CMakeLists.txt的编写

    CMake的执行就是这么简单,其难点在于如何编写CMakeLists.txt文件,下面结合例子简单介绍CMakeLists.txt的编写,看下面这个CMakeLists.txt

    #project name
    PROJECT(test_math)
    #head file path
    INCLUDE_DIRECTORIES(
    include
    )
    #source directory
    AUX_SOURCE_DIRECTORY(src DIR_SRCS)
    #set environment variable
    SET(TEST_MATH
    ${DIR_SRCS}
    )
    #set extern libraries
    SET(LIBRARIES
    libm.so
    )
    #add executable file
    ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
    #add link library
    TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})

    或者用下面这个CMakeLists.txt

    1. #project name
    2. PROJECT(test_math)
    3. #head file path
    4. INCLUDE_DIRECTORIES(
    5. include
    6. )
    7. #source directory
    8. AUX_SOURCE_DIRECTORY(src DIR_SRCS)
    9. #set environment variable
    10. SET(TEST_MATH
    11. ${DIR_SRCS}
    12. )
    13. #add executable file
    14. ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
    15. #add link library
    16. TARGET_LINK_LIBRARIES(../bin/bin m)

    这是一个测试数学函数的程序的CMakeLists.txt,"#"后面为注释的内容,CMake的命令全部为大写

    第2行指定生成的工程名为test_math

    第4行指定头文件目录为include

    第8行指定源文件目录为src,并将其赋值给环境变量DIR_SRCS

    第10行设定环境变量TEST_MATH的值为环境变量DIR_SRCS的值,此处用于显示如何用环境变量对环境变量进行赋值

    第14行将数学函数库赋值给环境变量LIBRARIES,当然,可以不用这个环境变量,而在后面直接使用该库名

    第18行用于指定生成文件,将环境变量TEST_MATH目录下的所有文件编译生成../bin目录下的可执行文件bin

    第20行指定../bin/bin执行时的链接库为环境变量LIBRARIES的值-libm.so

    下面给出源文件
    /src/main.c:

    1. #include<stdio.h>
    2. #include"../include/a.h"
    3. int main()
    4. {
    5.     double b=25.0;
    6.     double a=0.0;
    7.     a=get_sqrt(b);
    8.  
    9.     printf("a is %lf, b is %lf ",a,b);
    10.     return 0;
    11. }
    12.  

    /src/a.c

    1. #include"../include/a.h"
    2. double get_sqrt(double var1)
    3. {
    4.     return sqrt(var1);
    5. }
    6.  

    /include/a.h

     #ifndef  A_FILE_HEADER_INC

    1.  
    2. #define  A_FILE_HEADER_INC
    3. #include<math.h>
    4.  
    5. double get_sqrt(double var1);
    6.  
    7. #endif

    将CMakeLists.txt放在当前目录下,执行CMakeLists.txt

    1. $> cmake .
    2. $> make

    即可生成可执行文件,在目录/bin下的bin文件,好了运行看其效果是否和所想一样。

    应用软件

    Bullet Physics Engine
    KDE (starting with version 4)
    The Visualization Toolkit (VTK)
    Insight Segmentation and Registration Toolkit (ITK)
    ParaView
    DevIL - Open Image Library
    OpenSceneGraph
    Scribus
    Drishti
    PvPGN
    Chicken
    ParadisEO
    Quantum GIS
    OPENCV
    PCL
    Fast Light Toolkit(FLTK)
    MySql 5.58版本以后
    Clion

    参考

    百度百科CMAKE.

    免提想当年(tianzhch@gmail.com),cmake 简介

  • 相关阅读:
    JS中json对象克隆
    jhipster中图片路径打包问题(webpack)
    arcgis for javascript api 4.x 中,使用本地非 4326坐标系绘制功能实现
    spring核心之IOC
    spring基于XML的声明式事务控制
    hibernate之事务处理
    hibernate之一级缓存
    hibernate之一对多,多对一
    hibernate之HQL,Criteria与SQL
    spring的基于注解的IOC配置
  • 原文地址:https://www.cnblogs.com/arxive/p/6214956.html
Copyright © 2020-2023  润新知