CMake个人理解和使用

100编程书屋_孔夫子旧书网

前言

CMake是一个构建工具,通过它可以很容易创建跨平台的项目。通常使用它构建项目要分两步,通过源代码生成工程文件,通过工程文件构建目标产物(可能是动态库,静态库,也可能是可执行程序)。使用CMake的一个主要优势是在多平台或者多人协作的项目中,开发人员可以根据自己的喜好来使选择IDE,不用受其他人工程配置的影响,它有点像跨平台的IDE,通过它配置好相关设置之后,可以在多个平台无缝衔接,提高开发效率。
最简单的CMake工程
项目搭建

一个用CMake来管理的项目,其项目根目录通常会包含一个CMakeLists.txt的文件,当然子目录可能也有,这种情况我们稍后再说。我们先从最简单的项目开始。以下就是一个最简单的工程示例:

CMakeProject
|    CMakeLists.txt

|    main.cpp

这就是完整的可以跑起来的最小项目了。按照顺序,我们来看看文件里的内容

CMakeLists.txt

# 设置版本号
cmake_minimum_required(VERSION 3.10)
# 设置项目名
project(CMakeProject)
# 设置产物和源码的关联

add_executable(${CMAKE_PROJECT_NAME} main.cpp)

说明:

    CMake中命令不区分大小写
    以#开始的是备注
    引用变量语法${变量名}

所以文档中真正的有效内容就三行,

    cmake_minimum_required(VERSION 3.10)设置了CMake支持的最低版本,VERSION是参数名,后面是版本号,可以根据自己的需要修改。 注意参数名和参数是以空白符分隔的,不是逗号, 不然会报错。
    project(CMakeProject)CMake中字符串可以带引号或者不带,效果是一致的,这一行就是配置了项目名,如生成的Visual Studio的工程名就是依据这个名字来的。
    add_executable(${CMAKE_PROJECT_NAME} main.cpp)
    才是真正管理源码和目标产物的地方,这里我们使用了引用变量的写法,而文件中没有定义这个变量,说明这个变量存在于CMake中,在CMake还有很多预定义的变量,我们可以直接通过这种方式引用,上面的写法是将项目名设置为产物的名字,当然也可以直接填字符串,取个另外的名字都是可以的。后面的main.cpp则是用来生成产物的源码路径,这就是CMake最灵活的地方。源码路径可以是多样的,查找出来的,直接写的,相对路径,绝对路径都可以。 多个源码的话就用空白符分隔,依次写就行了。
    在上面的配置文件中,我们配置了它的源文件为main.cpp,我们想通过它来生成一个可执行的程序,内容也很简单:

#include <iostream>
int main()
{
    std::cout<<"hello CMake"<<std::endl;
    return 0;

}

项目编译与执行

准备工作已经做完,接下来我们就要使用CMake生成可执行文件了。

第一步当然是要安装CMake啦,这是下载地址!Download,根据自己的平台选择下载即可,安装完成之后需要把它添加到环境变量中,便于我们在任何地方都能方便使用。
安装了CMake以后,打开命令行工具,进入到刚才创建的项目根目录,也就是进入到存着CMakeLists.txt和main.cpp的目录,下一步准备生成项目。

通常为了不影响和污染当前的工作环境,我们会选择新建一个目录来存放生成的工程文件,以下我主要以Windows平台为主要平台讲解,其他平台基本一致。

mkdir build                 #创建文件夹,存储工程文件;
cd build                    #切换cmake工作目录;

cmake ..                    #生成项目文件;

这三步执行完后,我们就可以在build文件夹下看到里面已经生成了一个Visual Studio的工程,我们可以直接用Visual Studio打开这个工程,按照我们的习惯执行编译和调试。当然,假如想最快地生成可执行文件,我还是推荐使用CMake。

使用CMake执行编译,只需要在上一步的基础上(也就是已经成功执行了上面的三个步骤)再执行一个命令cmake --build .就可以了。这里切记不能少第三个英文句号,它代表在当前的工作目录中执行CMake的编译。
假如上面的四步都一切顺利的话,那么,我们就可以在build/debug目录下看到以add_executable的第一个参数命名的可执行文件(这里就是CMakeProject.exe),双击或者把它拖到命令行就可以执行它了。
项目扩展

在前面的例子中,生成工程文件,我们使用了两个命令,其实,这里可以直接用一个命令就可以完成——cmake build -S . -B build。这个命令的意思是以当前路径为工作路径,以build目录为生成目录,生成工程文件,也就是不需要我们手动创建build文件夹了。其中 -S参数配置的是源路径,-B配置的是生成路径。

另外,由于CMake没有清理方法,所以每次修改CMake的配置(也就是新增或者删除CMakeLists.txt中的代码),需要重新生成工程文件的时候,需要我们手动清理生成目录,保证它是空目录,假如不这样做,那么项目可能生成失败或者新配置不起作用。假如只是修改了

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百编程网朱老师

谢谢大爷谢谢大爷谢谢大爷谢谢大

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值