admin管理员组

文章数量:1031002

初识CMake

初识CMake

CMake概述

CMake 是一个 跨平台的 项目构建工具,CMake不过就是比makefile更高级一些,makefile不仅写起来繁琐,并且不同平台有所差异。

我们知道一个C/C++程序从源代码变为可执行程序需要经过 预处理(.i)->编译(.s)->汇编(.o)->链接(可执行) 四个阶段。如果我们一个项目当中的源文件较少,我们可以通过命令行来直接对源文件进行编译,但是如果是一个大项目当中进行编译,命令会变得特别的长且繁琐,并且不容易维护,易出错。

我们有两个办法来解决:   1、编写makefile,对makefile文件进行编写指令,让makefile告诉编译器该如何执行命令。然后我们需要使用 make 批处理命令,将makefile文件中所有的指令全部执行完毕。

  2、我们使用CMake来构建项目,我们需要再CMakeLists.txt文件中编写CMake脚本,使用 cmake CMakeLists.txt文件路径 来对CMake进行构建makefile文件。


CMake安装及使用

  安装一个CMake工具,我们需要准备Linux环境,并且使用VSCode远程连接Linux,一般Linux都是自带CMake工具的,如果没有就安装一下CMake。使用 cmake --version 查看当前CMake版本。

  以下是代码示例:

add.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

const char* libVersion = "Library Version 1.0";

int add(int a, int b)
{
    auto number = 8;
    return a + b;
}

div.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

double divide(int a, int b)
{
    return (double)a / b;
}

multi.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

int multiply(int a, int b)
{
    return a * b;
}

sub.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

int subtract(int a, int b)
{
    return a - b;
}

head.h:

代码语言:javascript代码运行次数:0运行复制
#ifndef _HEAD_H
#define _HEAD_H

int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
double divide(int a, int b);

#endif

main.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <iostream>
#include <cstdio>
#include "head.h"

using std::endl;
using std::cout;
using std::cin;

int main()
{
    int a = 20;
    int b = 12;
    cout << "a = " << a << ", b = " << b << endl;
    cout << "a + b = " << add(a, b) << endl;
    cout << "a - b = " << subtract(a, b) << endl;
    cout << "a * b = " << multiply(a, b) << endl;
    cout << "a / b = " << divide(a, b) << endl;
    return 0;
}

我们可以直接通过命令行来编译源文件:

我们使用CMake来构建项目,我们就需要先在当前面目录下新建一个 CMakeLists.txt 文件,这个文件每一个字母都不能错。


注释

注释行:CMake使用#作为行注释,可以放在任意位置:

代码语言:javascript代码运行次数:0运行复制
# 这是一个CMake文件
cmake_minimum_required(VERSION 3.15)
project(test)

块注释:使用 #[[]] 形式进行块注释:

代码语言:javascript代码运行次数:0运行复制
#[[这是一个块注释
wadubafa wad
fawawwidaf
awdfwawaf  ]]

常用命令

  • cmake_minimum_required命令:我们使用 cmake_mininum_required 来指定使用的cmake的最低版本。这是一个可选命令,非必须,如果不加可能会有警告。但是我们最好指定一下我们使用CMake的版本,因为CMake3.0与CMake3.15在语法层面就有些许差别,我们尽量指定CMake3.15以上版本的使用。
代码语言:javascript代码运行次数:0运行复制
cmake_minimum_required(VERSION 3.15)
  • project命令:定义工程名,并指定工程版本、工程描述、web主业地址,支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。一些其他的可选项,这里就不再展示了,如果感兴趣可以去官网查阅。
代码语言:javascript代码运行次数:0运行复制
project(<PROJECT-NAME> [<language-name> ...]) # 指定项目的项目名称
  • add_executeable命令:定义工程会生成一个可执行程序,指定可执行程序名称与源文件,如果是多个源文件,可以在以 空格 或者 ;作为分隔符,
代码语言:javascript代码运行次数:0运行复制
add_executeable(可执行程序名称  源文件名称)
  • 执行cmake命令:我们将CMakeLists.txt文件编辑好之后,就可以执行 cmake 命令了。
代码语言:javascript代码运行次数:0运行复制
cmake CMakeLists.txt文件所在路径

xzy@iZ0jle4p97d8x4byf3u32mZ:~/cmake/version0$ tree . ├── add.cpp ├── build ├── CMakeLists.txt ├── div.cpp ├── head.h ├── main.cpp ├── multi.cpp ├── mybin └── sub.cpp

这是文件目录结构,如果我们在当前目录编译CMakeLists.txt文件,我们直接使用 cmake . 如果我们想要在build目录下编译,我们可以使用 cmake .. 来编译。


编写CMakeLists.txt并构建makefile

代码语言:javascript代码运行次数:0运行复制
cmake_minimum_required(VERSION 3.15)
project(test)
add_executable(mybin add.cpp div.cpp multi.cpp sub.cpp main.cpp)

这些都是由CMake编译得来的,我们发现也自动生成了makefile文件,那么我们执行make命令就可以得到可执行程序了:

我们可以看到,除了我们想要的makefile文件之外,还生成了一些其他的文件,而这些文件在当前目录就会显得非常杂乱,所以我们可以新建一个文件夹,在文件夹中执行cmake命令,让生成的文件全部都在新建目录下:

这样目录结构就会变得更加清晰:

这个时候去到build目录中运行可执行程序:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-13,如有侵权请联系 cloudcommunity@tencent 删除工具命令行cmakeint编译

初识CMake

初识CMake

CMake概述

CMake 是一个 跨平台的 项目构建工具,CMake不过就是比makefile更高级一些,makefile不仅写起来繁琐,并且不同平台有所差异。

我们知道一个C/C++程序从源代码变为可执行程序需要经过 预处理(.i)->编译(.s)->汇编(.o)->链接(可执行) 四个阶段。如果我们一个项目当中的源文件较少,我们可以通过命令行来直接对源文件进行编译,但是如果是一个大项目当中进行编译,命令会变得特别的长且繁琐,并且不容易维护,易出错。

我们有两个办法来解决:   1、编写makefile,对makefile文件进行编写指令,让makefile告诉编译器该如何执行命令。然后我们需要使用 make 批处理命令,将makefile文件中所有的指令全部执行完毕。

  2、我们使用CMake来构建项目,我们需要再CMakeLists.txt文件中编写CMake脚本,使用 cmake CMakeLists.txt文件路径 来对CMake进行构建makefile文件。


CMake安装及使用

  安装一个CMake工具,我们需要准备Linux环境,并且使用VSCode远程连接Linux,一般Linux都是自带CMake工具的,如果没有就安装一下CMake。使用 cmake --version 查看当前CMake版本。

  以下是代码示例:

add.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

const char* libVersion = "Library Version 1.0";

int add(int a, int b)
{
    auto number = 8;
    return a + b;
}

div.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

double divide(int a, int b)
{
    return (double)a / b;
}

multi.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

int multiply(int a, int b)
{
    return a * b;
}

sub.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <cstdio>
#include "head.h"

int subtract(int a, int b)
{
    return a - b;
}

head.h:

代码语言:javascript代码运行次数:0运行复制
#ifndef _HEAD_H
#define _HEAD_H

int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
double divide(int a, int b);

#endif

main.cpp:

代码语言:javascript代码运行次数:0运行复制
#include <iostream>
#include <cstdio>
#include "head.h"

using std::endl;
using std::cout;
using std::cin;

int main()
{
    int a = 20;
    int b = 12;
    cout << "a = " << a << ", b = " << b << endl;
    cout << "a + b = " << add(a, b) << endl;
    cout << "a - b = " << subtract(a, b) << endl;
    cout << "a * b = " << multiply(a, b) << endl;
    cout << "a / b = " << divide(a, b) << endl;
    return 0;
}

我们可以直接通过命令行来编译源文件:

我们使用CMake来构建项目,我们就需要先在当前面目录下新建一个 CMakeLists.txt 文件,这个文件每一个字母都不能错。


注释

注释行:CMake使用#作为行注释,可以放在任意位置:

代码语言:javascript代码运行次数:0运行复制
# 这是一个CMake文件
cmake_minimum_required(VERSION 3.15)
project(test)

块注释:使用 #[[]] 形式进行块注释:

代码语言:javascript代码运行次数:0运行复制
#[[这是一个块注释
wadubafa wad
fawawwidaf
awdfwawaf  ]]

常用命令

  • cmake_minimum_required命令:我们使用 cmake_mininum_required 来指定使用的cmake的最低版本。这是一个可选命令,非必须,如果不加可能会有警告。但是我们最好指定一下我们使用CMake的版本,因为CMake3.0与CMake3.15在语法层面就有些许差别,我们尽量指定CMake3.15以上版本的使用。
代码语言:javascript代码运行次数:0运行复制
cmake_minimum_required(VERSION 3.15)
  • project命令:定义工程名,并指定工程版本、工程描述、web主业地址,支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。一些其他的可选项,这里就不再展示了,如果感兴趣可以去官网查阅。
代码语言:javascript代码运行次数:0运行复制
project(<PROJECT-NAME> [<language-name> ...]) # 指定项目的项目名称
  • add_executeable命令:定义工程会生成一个可执行程序,指定可执行程序名称与源文件,如果是多个源文件,可以在以 空格 或者 ;作为分隔符,
代码语言:javascript代码运行次数:0运行复制
add_executeable(可执行程序名称  源文件名称)
  • 执行cmake命令:我们将CMakeLists.txt文件编辑好之后,就可以执行 cmake 命令了。
代码语言:javascript代码运行次数:0运行复制
cmake CMakeLists.txt文件所在路径

xzy@iZ0jle4p97d8x4byf3u32mZ:~/cmake/version0$ tree . ├── add.cpp ├── build ├── CMakeLists.txt ├── div.cpp ├── head.h ├── main.cpp ├── multi.cpp ├── mybin └── sub.cpp

这是文件目录结构,如果我们在当前目录编译CMakeLists.txt文件,我们直接使用 cmake . 如果我们想要在build目录下编译,我们可以使用 cmake .. 来编译。


编写CMakeLists.txt并构建makefile

代码语言:javascript代码运行次数:0运行复制
cmake_minimum_required(VERSION 3.15)
project(test)
add_executable(mybin add.cpp div.cpp multi.cpp sub.cpp main.cpp)

这些都是由CMake编译得来的,我们发现也自动生成了makefile文件,那么我们执行make命令就可以得到可执行程序了:

我们可以看到,除了我们想要的makefile文件之外,还生成了一些其他的文件,而这些文件在当前目录就会显得非常杂乱,所以我们可以新建一个文件夹,在文件夹中执行cmake命令,让生成的文件全部都在新建目录下:

这样目录结构就会变得更加清晰:

这个时候去到build目录中运行可执行程序:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-13,如有侵权请联系 cloudcommunity@tencent 删除工具命令行cmakeint编译

本文标签: 初识CMake