CMake 简介

2023-10-27

        cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。

一、为何要使用项目构建工具?
        为何要使用cmake和autotools之类的项目构建工具? 我想,这恐怕是刚刚接触软件项目的人最应该问的问题之一了。

“Hello, world!“这个最经典的程序相信我们每个人都写过。无论在什么平台下,编译和运行这个程序都仅需要非常简单的操作。但事实上,hello,world最多只能算是一个实例程序,根本算不上一个真正的软件项目。

任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。使想一下,如果把一个像KDE4那么大的项目像hello world那样,把全部代码都放到一个main.cpp文件中,那将会是多么恐怖的一件事情。别说KDE4,就是我们随便一个几千行代码的小项目,也不会有人干这种蠢事。

决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。
看到这里,也许你会想到makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MSnmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

其实,cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。

二、cmake的主要特点:
        cmake和autotools是不同的项目管理工具,有各自的特点和用户群。存在即为合理,因此我们不会对两者进行优劣比较,这里只给出cmake的一些主要特点:
        1.开放源代码,使用类 BSD 许可发布。
        2.跨平台。
        3.能够管理大型项目,KDE4 就是最好的证明。
        4.简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
        5.可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。

三、安装cmake
        几乎所有主流的Linux发行版的源中都包含有cmake的安装包,直接从源中添加即可。当然,也可以在官方网站下载源代码自行编译安装。对于Windows和Mac用户,cmake的官方网站上有相应的安装包,下载安装即可,无须赘述。

注:为了能够测试本文中的实例程序,如果读者的Linux系统中所带的cmake版本低于2.6,请从官网下载2.6版本或以上的源代码进行编译并安装。
在linux下安装cmake

首先下载源码包   : http://www.cmake.org/cmake/resources/software.html

这里下载的是 cmake-3.22.0-rc2.tar.gz , 随便找个目录解压缩
 

#tar -xvf cmake-3.22.0-rc2.tar.gz        
#cd cmake-3.22.0-rc2
#./bootstrap
#make
#make install
 
cmake 会默认安装在 /usr/local/bin 下面

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 简介 的相关文章

随机推荐

  • TrafficMonitor之Windows10监控小工具

    TrafficMonitor之Windows10监控小工具 安装 基本设置 软件下载地址 https gitee com xiaoha1234 soft ware blob master TrafficMonitor zip 1 基本设置
  • Swift学习笔记之---使用if和let处理空变量

    在Swift程序中 结合if和let 可以方便地处理空变量 nullable variable 使用可选绑定 optional binding 来判断可选类型是否包含值 如果包含就把值赋给一个临时常量或者变量 可选绑定可以用在if和whil
  • HashMap的get、put、resize过程

    get 1 先计算出key对应的hash值 2 对超出数组范围的hash值进行处理 3 根据正确的hash值 下标值 找到所在的链表的头结点 4 遍历链表 如果key值相等 返回对应的value值 否则返回null put 1 先计算出ke
  • 关于网络问题:WARNING: ROS_MASTER_URI [http://EPRobot:11311] host is not set to this machine

    关于网络问题 WARNING ROS MASTER URI http EPRobot 11311 host is not set to this machine 如果需要远程链接 需要在远程服务器将ROS MASTER URI变为启动ros
  • assimp批量转模型,[OpenGL] 使用Assimp导入模型(Qt)

    最近终于决定要在本身的demo中加入模型了 本次选择的是开源库Assimp 以前一直嫌麻烦没有去落实这件事 但实际上 assimp的配置意外的没有我想象中的那么麻烦 html 下载源码后 须要使用cmake进行编译 在上方选择源码位置 和b
  • RouterOS 动态IP接入上网设置教程(超详细)

    根据动态IP接入拓扑图对RouterOS做如下设置 首先启动RouterOS软路由 并且连接电脑 然后打开winbox登录ROS 1 正取区分内 外网 目的是为了方便记忆和区分 2 建立DHCP Client 客户端 进行自动获取外网IP地
  • 数据结构单链表之合并两个有序链表笔记。

    1 0题目描述 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 2 0例子演示 输入 l1 1 2 4 l2 1 3 4 输出 1 1 2 3 4 4 示例 2 输入 l1 l2 输出 示例
  • react 之 umi(乌米)--入门介绍

    介绍 umi 中文可发音为乌米 是一个可插拔的企业级 react 应用框架 umi 以路由为基础的 支持类 next js 的约定式路由 以及各种进阶的路由功能 并以此进行功能扩展 比如支持路由级的按需加载 然后配以完善的插件体系 覆盖从源
  • games101,作业2

    需要补充的函数 rasterize triangle 执行三角形栅格化算法 static bool insideTriangle 测试点是否在三角形内 你可以修改此函 数的定义 这意味着 你可以按照自己的方式更新返回类型或函数参数 判断点是
  • ssl工作流程

    1 ssl工作流程 SSL位于应用层和传输层之间 它能够为基于TCP等可靠连接的应用层协议提供安全性保证 SSL协议本身分为两层 上层为SSL握手协议 SSL handshake protocol SSLpassword变化协议 SSL c
  • 【flutter】完美解决导入 dart.ui 中缺少 platformViewRegistry.registerViewFactory 方法

    邂逅 很多情景需要使用 package flutter web ui ui dart 或者 dart ui 比如显示一个网页 import package flutter web ui ui dart as ui 或者 import dar
  • Debian11 修改IP地址和DNS

    修改IP vim etc network interfaces 内容如下 auto ens33 iface ens33 inet static address 192 168 1 200 netmask 255 255 255 0 gate
  • (三十七)期权的隐含波动率计算与图形

    隐含波动率的计算 通过BS公式无法反解出隐含波动率 常用的求解方法有牛顿迭代法和二分法 牛顿迭代法 主要思路是 先设定一个初始波动率值 比如20 然后建立一种迭代关系 如果由初始波动率值得到的期权价格高于市场价格 那么初始波动率减少一定的量
  • D-S证据融合理论python代码

    D S证据融合理论是我们在做决策级融合时十分重要的方法之一 下面我们利用numpy库来实现D S融合过程 具体代码如下所示 import numpy as np def fusion a b m1 np array a m2 np arra
  • 网课脚本教程 【基础】(2) 脚本制作规范

    欢迎来到skeleton系列教程 网课脚本编写教程 制作优良脚本应该有如下规范 一 做任何脚本 优先考虑制作发送 网络请求 的脚本 其次考虑制作自动化脚本 意思就是 做任何脚本 如果你对抓包 发送网络请求可以熟悉掌握 那么优先考虑 发送请求
  • blender 学习笔记

    blender 中文手册 查看 鼠标控制 鼠标中键 转动视角 按住 Alt 正交旋转 Shift 鼠标中键 平移视角 Shift 步行 飞行模式 wasd qe H 隐藏选择物体 Shift H 隐藏未选择物体 Alt H 显示所有 选中物
  • input复选框设置和获取值

  • vscode里面模块缺失的几种可能以及解决方法(部分可能)

    最近在做Python的脚本编写 老是在运行文件时提示缺少模块 通过几天的了解 总结出以下的方法来解决 1 模块没有安装 对于这中的解决方法很简单 哪里少了安哪里 在cmd或者bash里边直接使用下边的命令就可以直接安装 注意 如果你的机器上
  • 在一个有序数组中,查找具体的某个数(二分查找)

    问题 给定已排序好的n个元素arr 0 n 1 现在要在这n 个元素中找出一特定元素x 基本思想 将n个元素分成个数大致相同的两半 取arr n 2 与x进行比较 如果x arr n 2 则找到x 算法终止 如果x
  • CMake 简介

    cmake是kitware公司以及一些开源开发者在开发几个工具套件 VTK 的过程中所产生的衍生品 后来经过发展 最终形成体系 在2001年成为一个独立的开放源代码项目 其官方网站是www cmake org 可以通过访问官方网站来获得更多