cmake创建windows工程编译环境

1.1 为什么需要CMake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 QMake ,微软的 MS NMake,BSD PMake,Makepp等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

CMake就是为解决此问题而诞生的,CMake的全称是Cross platform Make,正如其名,是一种跨平台的Make工具。

CMake首先需要开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到Write once, run everywhere。显然,CMake 是一个比上述几种 Make更高级的编译配置工具。

参考 CMake 入门实战 | HaHack

1.2 CMake诞生历史

CMake于1999年开始开发,是为了解决美国国家医学图书馆出资的Visible Human Project项目下的Insight Segmentation and Registration Toolkit(ITK)软件的跨平台建构的需求而创造出来的。

其设计受到了Ken Martin开发的pcmaker所影响,pcmaker当初则是为了支持Visualization Toolkit(VTK)这个开放源代码的三维图形和视觉系统才出现的,今日VTK也采用了CMake。

CMake于2000年首次发布,并于2001年进一步发展。

参考:https://en.wikipedia.org/wiki/CMake#History

2 安装必要软件

2.1 安装MinGW

下载64位的MinGW离线安装包,并使用7z进行解压(注意:WinRAR不支持7z格式,),然后MinGW安装目录下的bin目录加入PATH环境变量。(使用在线安装工具可能提示“Cannot download repository.txt”)

https://sourceforge.net/projects/mingw-w64/files/

然后MinGW安装目录下的bin目录加入PATH环境变量

输入g++ --version验证是否安装配置成功

 MinGW的bin目录中,make程序名称默认为mingw32-make.exe,为了方便调用后面章节由CMake工具生成的Makefile文件,请复制一份更名make.exe

 

输入make,验证make是否可用

cmake创建windows工程编译环境_第1张图片

 如果不能出现上述提示,请检查是否将MinGW安装目录下的bin目录加入PATH环境变量。

2.2  安装CMake

Download | CMake,双击安装。然后将CMake安装目录下的bin目录加入PATH环境变量。输入cmake --version,验证cmake是否配置OK

2.3 CMake可执行程序介绍

在CMake安装目录下的bin目录,是CMake的可执行文件。

cmake创建windows工程编译环境_第2张图片

可执行程序

描述

cmake.exe

用于生成本地构建文件,如Makefile

cmake-gui.exe

用于显示用户的配置项以及生成本地构建文件。

ctest.exe

用于对生成的可执行文件进行测试,参见3.4.2

pack.exe

用于制作安装包文件,参见

3 CMake 入门

3.1 参考官方入门资料

CMake Tutorial | CMake

官方指南,是一个非常的入门材料,它通过Step by step的讲解方式,给出各种CMake的场景样例,对了解CMake的功能全貌很有帮助。

如果看不懂没有关系,也可以以下链接,是对上述官方指南的翻译和解读

GitHub - chaneyzorn/CMake-tutorial: CMake 官方教程----的翻译

cmake使用教程(二)-添加库 - 掘金

3.2 一个简单的例子

实现开根方的功能:tutorial.cpp

// A simple program that computes the square root of a number
#include 
#include 
#include 
int main (int argc, char *argv[])
{
  if (argc < 2)
    {
    fprintf(stdout,"Usage: %s number\n",argv[0]);
    return 1;
    }
  double inputValue = atof(argv[1]);
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}

参看下面的CMakeLists.txt文件,最简单的一个工程需要有一个这样的cmake文件,一共三行

# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0)

# CMake 设置项目名称
project(Tutorial)

# 指定生成目标
add_executable(Tutorial tutorial.cpp)

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。对于上面的 CMakeLists.txt 文件,依次出现了几个命令:

  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
  2. project:参数值是 Tutorial,该命令表示项目的名称是 Tutorial 。
  3. add_executable:将名为 tutorial.cpp 的源文件编译成一个名称为 Tutorial 的可执行文件。

为了指定makefile生成器类型,以及后续代码编译工具,所以写了一个构建makefile及编译的脚本

:: 删除build文件夹,“/S”表示递归删除,“/Q” 表示静默,可通过在cmd下执行“help rmdir”查看参数具体功能
rmdir /S /Q build
mkdir build
cd build

:: -G后面指定具体的生成器类型,MinGW表示windows,Unix表示unix或linux环境下的生成器。
:: 有关生成器详细参见手册:  https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#manual:cmake-generators(7)
:: DCMAKE_C_COMPILER表示C代码的编译工具,DCMAKE_CXX_COMPILER表示C++代码的编译工具;
:: “..”表示到上一级目录寻找"CMakeLists.txt",等同于“../”。
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..

:: 在cmake生成了makefile文件,并指定了C/C++源码编译工具后,使用make命令编译makefile定义的工程。
make

pause

整个工程三个文件,结构如下:

cmake创建windows工程编译环境_第3张图片

编译过程:

cmake创建windows工程编译环境_第4张图片

 编译结果:

cmake创建windows工程编译环境_第5张图片

运行试验:

4      CMake基本语法

在经过前面的CMake入门后,对CMake的功能有一个初步的了解。而要掌握CMake,首先要学编写CMake构建文件(CMakeLists.txt和*.cmake),它是由一些列命令构成,需要掌握一些常用的命令。

4.1      CMake构建文件编辑器

VSCode安装CMake插件,支持对CMake构建文件中命令高亮显示,以及输入联想功能,如下图

4      CMake基本语法

在经过前面的CMake入门后,对CMake的功能有一个初步的了解。而要掌握CMake,首先要学编写CMake构建文件(CMakeLists.txt和*.cmake),它是由一些列命令构成,需要掌握一些常用的命令。

4.1      CMake构建文件编辑器

VSCode安装CMake插件,支持对CMake构建文件中命令高亮显示,以及输入联想功能,如下图

cmake创建windows工程编译环境_第6张图片cmake创建windows工程编译环境_第7张图片

4.2      CMake构建文件执行

CMake构建文件有三种执行方式

4.2.1        cmake

在命令行cmd/shell下,提供cmake命令执行文件

4.2.2        cmake-gui

提供一个GUI执行CMake构建文件

4.2.3        VS Code的CMake Tools插件

VS Code提供了插件,可以调用CMake命令执行CMake构建文件。cmake创建windows工程编译环境_第8张图片

 点击VS Code视窗底部的按钮

4.3      CMake构建文件语法

CMake构建文件就是由多条命令组成。包括变量定义、条件块、循环块、宏定义和函数定义,这些定义本身也是命令。

一个源码工程的CMake文件按三种文件方式组织

l  Directories (CMakeLists.txt):源码工程根目录下的CMakeLists.txt代表整个工程构建,通过add_subdirectory添加子目录构建,最终形成整个源码工程对应的构建树。

l  Scripts (

你可能感兴趣的:(编译和调试,cmake,windows编译环境,MinGW)