【Cmake】初识CMake(一)

业务需要用到CMake和gtest框架,但我此前从来没接触过,就花时间整理了下,做了一个简单的cmake尝试。

前言

我过去使用Java语言,就算用C++也是Dev C++ IDE,很少关注编译与构建的细节。只是大概知道:

  • C++是编译型语言。cpp代码文件需要由编译器编译成exe二进制文件才能执行
  • Java是编译解释性语言。java代码文件需要先编译成class文件,再由解释器放在jvm虚拟机里运行。

花时间学习CMake确实有助于我理解很多底层的知识,特别是理解很多细节,这个教程会持续下去,但不一定每周都更新。

准备工作

语法知识放一边,先来安装CMake和gcc。(以下的安装基于Windows)

gcc

如果你电脑已经安装了Dev C++或者Visual Studio,你大概率有一个gcc在电脑里。

使用以下代码检查电脑的gcc环境:gcc -v
结果
你应该能看出来,我电脑的gcc用的是新版Dev C++自带的 9.2.0,我电脑同时安装了VS 2022,这给我带来了不少麻烦,会在以后的教程里提及。

这个版本的Dev C++是国内作者的改版,链接:小龙 Dev-C++ 中文主页

如果你的电脑有MinGW环境

添加环境变量即可,以我的为例,Dev C++自带的gcc在以下位置:D:\Program Files (x86)\Dev-Cpp\TDM-GCC-64,这个目录下应该包含bin、include、lib等文件夹。

在环境变量-系统变量-Path里,加入bin文件夹所在的路径,如图:环境变量

如果你的电脑没有MinGW环境

下载地址:MinGW

install,一路next。安装成功后打开MinGW Installation Manager,选择需要安装的版本(如果你不知道需要哪些就全选),点击菜单栏的Installation,点击Apply Changes,在弹出的对话框里点击Apply,然后等待安装完成即可。

然后按照上面的配置环境变量。

顺便科普一下TDM-GCC和MinGW的信息

MinGW: 编译目标仅兼容 32 位应用程序,最新的官方二进制版本为 GCC 9.2.0。(OSDN)

MinGW-w64: 衍生自 MinGW 的项目,编译目标兼容 32 位应用程序与64 位应用程序,最新的官方二进制版本为 GCC 8.1.0。(SourceForge)

TDM-GCC: 衍生自 MinGW 和 MinGW-w64 的项目,分为 32 位与 64 位两个版本,32 位版本的编译目标仅兼容 32 位应用程序,64位版本的编译目标兼容 32 位应用程序与 64 位应用程序,最新的官方二进制版本为 GCC 10.3.0。

CMake

下载地址:Download | CMake

选择Windows x64的msi安装包,如下安装包列表一路安装即可,记得为所有用户安装,以及配置path。

在PowerShell输入cmake --version以检查CMake是否安装成功,如图
安装成功

从Helloworld开始

CMake

简单来说,gcc的确可以将源文件编译成exe文件,但文件一多,就需要一个编译顺序,利用构建(build)可以指定这种顺序,定义构建的文件被称为Makefile。

但是编写Makefile对于大型项目又比较复杂,通过CMake就可以使用更加简洁的语法定义构建的流程,CMake定义构建过程的文件为CMakeLists.txt。

cmake的一般流程为:

  1. 生成构建系统,对应的指令为cmake
  2. 构建,对应的指令为cmake --build
  3. 其他操作,比如执行、测试等。

一个非常简单的例子

这个例子简单到,实际生产的时候,是绝对不会用这样的结构的。

目录结构如下:

cmakeTest
├─ CMakeLists.txt
└─ main.cpp

main.cpp的代码如下。就是输出hello cmake,没什么意义。

#include<cstdio>

using namespace std;

int main(){
    printf("Hello CMake!");
}

CMakeLists.txt的结构比较重要:

# 项目所需最低Cmake版本
cmake_minimum_required(VERSION 3.12)

# 项目名称、版本、语言
project(cmaketest VERSION 1.0.0 LANGUAGES C CXX)

# 源文件与可执行文件
add_executable(helloc main.cpp)

生成构建系统

在项目根目录下执行

cmake -B build

结果如下:
生成构建系统
很奇怪,这里用的是 VS 2022 的构建,没有用gcc的,这个问题留待以后解决,目前暂时保持现状不动。

构建

同样在根目录,执行

cmake --build build

构建

执行

可能由于使用 VS 的原因,我的可执行文件并没有在根目录生成。你可以自己寻找位置,这太奇怪了。执行

猜你喜欢

转载自blog.csdn.net/qq_37387199/article/details/126816253