CMake 可以生成多种类型的构建系统文件,比如NMake Makefiles,Borland Makefiles,MYSYS Makefiles,MinGW MakefilesUnix Makefiles等等各类生成器(generator)选项,其中用的最多的应该是NMakeMinGW以及Unix了,我们可以在CMake的桌面程序中看到这些生成器,并设置它们。

9392ad636c3143f4bd561d7e4bd4dd25.png

NMake使用类似于Windows批处理脚本的语法,支持Windows上的编译器和工具链,VS使用的就是这种系统文件构建方式,因次VS的构建方式是NMake构建方式的一个子集,NMake 并不生成 Makefile,而是使用自己的构建系统,当使用 CMake 生成 NMake 构建系统时,CMake 会生成一个 `.sln` 文件和 `.vcxproj` 文件,而不是传统的 Makefile,因此NMake模式下的CMake能够生成相当好看的VS项目架构。(一般安装了VS,CMake就自动将生成器种类变为了VS类或者NMake类了)

MinGW Makefiles,用于生成适用于 MinGW 工具链的 Makefile 文件。MinGW 是一个用于 Windows 平台的开发工具集,它提供了一组类似于 Unix 的工具和库,包括 GCC 编译器和 GNU Make 构建工具(本博客默认你安装好了MinGW并且配置好了MinGW的环境变量,详细步骤可以看其他博主的博客)。

Unix Makefiles,标准的GNU Make构建系统,用于Unix和类Unix系统。它使用Makefile文件中的规则和命令来构建项目,具有广泛的灵活性和可定制性,使你能够在 Unix、Linux 或类 Unix 系统上使用 Make 工具进行项目构建。

首先准备好新建一个文件夹test3,在里面创建好main.cpp文件

#include<stdio.h>
int main()
{
printf("hello world");
getchar();
return 0;
}

然后再创建CMakeLists.txt文件

cmake_minimum_required(VERSION 3.8)
project(test3)
add_executable(test3 main.cpp)

在该目录打开控制台 

c80316e3a54d4779a32fcf29e26b449b.png

mkdir build指令创建build目录,用于存放CMake的项目文件 

5c626d4ebd0d47319e1b5b6b93350195.png 进入build目录33a5d375acec4890aa6caf48c5c7df49.png

输入指令cmake .. -G "MinGW Makefiles,这个指令有两种效果,一将CMake的生成器种类变为MinGW Makefile类型,二构建项目,生成Makefile等文件。07c73fcdd8224ef2b9d26129cae65f0b.png

 build目录中出现了Makefile等一系列文件5473e83284ba4bf088f84f5adec7bd05.png

然后找到你安装MinGW的目录里面的bin目录,找到mingw32-make.exe,这个文件用于编译mian.cpp文件生成对应的项目可执行文件test3.exe,记住这个文件的名称!527719868feb4373bd88182fd389eca4.png

回到test3项目文件夹下的build目录,打开控制台程序,输入mingw32-make(就是上面那个文件的前缀名称,有些人自己不知不觉就把这个文件名称改成了别的名称,比如make.exe,那么就应该输入make来编译main.cpp,不过非常不建议修改这个文件的名称,因为CMake的生成器是和这个文件紧密相关的,有的CMake版本安装的时候会自动与这个文件相关联,如果你只是修改了这个文件的名称,而不修改CMake内部的配置的话,之后用MinGW Makefiles编译项目的时候就可能报错!) 。

2a127dbadb1d4e17a873a4e86af4679e.png

 成功生成test3.exe文件a012a9e16eb54d67b0b7b97f2ecad324.png

继续在控制台上输入./test3.exe成功执行main.cpp程序,输出了hello world,至此CMake配置运行MinGW Makefile项目结束。f416758cfc7e42ed9549dbefe4c5d7e9.png

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐