CMake1-1:CMake概述【比MakeFile高级的编译器(Level-2)】【跨平台、开源的构建系统】【跨平台编译工具,比make更为高级,使用起来更方便】【CMakeLists.txt】

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

CMake可以说已经成为大部分C++开源项目标配

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

cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))

一、为何要使用项目构建工具

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

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

任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。

试想一下,如果把一个像KDE4那么大的项目像hello world那样,把全部代码都放到一个main.cpp文件中,那将会是多么恐怖的一件事情。别说KDE4,就是我们随便一个几千行代码的小项目,也不会有人干这种蠢事。

决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。

看到这里,也许你会想到makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?

其实,cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。

如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。

因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。

二、CMake的主要特点

在这里插入图片描述
cmake和autotools是不同的项目管理工具,有各自的特点和用户群。存在即为合理,因此我们不会对两者进行优劣比较,这里只给出cmake的一些主要特点:

  1. 开放源代码,使用类 BSD 许可发布。
  2. 跨平台。
  3. 能够管理大型项目,KDE4 就是最好的证明。
  4. 简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
  5. 可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。

1、Cross-platform development【跨平台开发】

Let’s assume you have some cross-platform project with C++ code shared along different platforms/IDEs. Say you use Visual Studio on Windows, Xcode on OSX and Makefile for Linux:【假设您有一些跨平台项目,其中C++代码在不同的平台/IDE之间共享。比如说,您在Windows上使用Visual Studio,在OSX上使用Xcode,而在Linux上使用Makefile。】
在这里插入图片描述
What you will do if you want to add new bar.cpp source file? You have to add it to every tool you use:【如果你想要添加一个新的源文件bar.cpp,你需要在所有使用的工具中添加它:】
在这里插入图片描述
To keep the environment consistent you have to do the similar update several times. And the most important thing is that you have to do it manually (arrow marked with a red color on the diagram in this case). Of course such approach is error prone and not flexible.【为了保持环境的一致性,你必须多次进行类似的更新。而且最重要的是,你必须手动进行(在这种情况下,图表上的箭头用红色标记)。当然,这种方法容易出错,不够灵活。】

CMake solve this design flaw by adding extra step to development process. You can describe your project in CMakeLists.txt file and use CMake to generate tools you currently interested in using cross-platform CMake code:【CMake通过在开发过程中增加额外的步骤来解决这个设计缺陷。你可以在CMakeLists.txt文件中描述你的项目,并使用CMake生成你目前感兴趣的跨平台CMake代码。】
在这里插入图片描述
Same action - adding new bar.cpp file, will be done in one step now:【相同的操作——添加新的bar.cpp文件,现在只需一步即可完成:】
在这里插入图片描述
Note that the bottom part of the diagram was not changed. I.e. you still can keep using your favorite tools like Visual Studio/msbuild, Xcode/xcodebuild and Makefile/make!【请注意,图表的底部部分没有改变。也就是说,你仍然可以继续使用你最喜欢的工具,如Visual Studio/msbuild、Xcode/xcodebuild以及Makefile/make!】

三、安装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 下面




参考资料:
CMake教程系列-00-简介
w3cschool:Cmake 3.8
CMAKE官方文档
cmake快速入门
CMake简介
Clion(CMake工具)中引入第三方库的详细方法
基于VSCode和CMake进行C/C++开发「第六讲」CMake

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值