超详细的cmake入门教程

超详细的cmake入门教程

CMake 是一个开源的跨平台构建工具,可以自动化生成编译脚本,支持多种编译器和操作系统。本文将为大家介绍基本的 CMake 用法,以及如何在项目中使用 CMake 进行构建。

基本概念

在使用 CMake 之前,我们需要了解几个基本概念:

  1. 项目:即我们要构建的一个完整而独立的工程,由多个文件组成;
  2. 源文件:即工程中的源代码文件,可以是 C、C++、Java 或 Python 等;
  3. 目标文件:即生成的中间文件(object),由编译器编译源文件生成;
  4. 可执行文件:即最终生成的二进制文件。

安装

在开始使用 CMake 之前,我们需要先安装。CMake 的官方网站为 cmake.org,可以在该网站上下载对应平台的安装包进行安装。同时,CMake 还支持通过包管理工具(如 apt-get、yum 等)进行安装,具体方法请参照相关文档。

CMakeLists.txt

CMake 的配置文件为 CMakeLists.txt,该文件需要位于工程的根目录下。我们需要在该文件中指定工程名称、源文件和可执行文件等信息。以下是一个简单的示例:

# 指定 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 指定工程名称
project(demo)

# 添加源文件
add_executable(demo main.cpp)

在该示例中,我们首先使用 cmake_minimum_required 指定了 CMake 的最低版本要求,然后使用 project 指定了工程名称,并最后使用 add_executable 添加了源文件。

构建

使用 CMake 进行构建非常简单,我们只需要在工程根目录下执行以下命令即可:

mkdir build && cd build
cmake .. # 生成 Makefile
make # 构建工程

在执行 cmake .. 命令时,CMake 会根据 CMakeLists.txt 文件生成对应的 Makefile,然后使用 make 命令进行编译。

示例一:C++ 工程的构建

以下是一个 C++ 工程的示例,以计算器项目为例。

  1. 在项目根目录下创建 CMakeLists.txt 文件,并添加以下内容:
# 指定 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 指定工程名称
project(calculator)

# 添加源文件
add_executable(calculator main.cpp add.cpp subtract.cpp)

在该示例中,我们通过 add_executable 指定了三个源文件(main.cpp、add.cpp 和 subtract.cpp),并以 calculator 为名称生成可执行文件。

  1. 在项目根目录下新建 main.cppadd.cppsubtract.cpp 三个文件,内容如下:
// main.cpp
#include <iostream>
#include "add.h"
#include "subtract.h"

using namespace std;

int main(int argc, char* argv[]) {
  int a = 10;
  int b = 20;
  cout << a << " + " << b << " = " << add(a, b) << endl;
  cout << a << " - " << b << " = " << subtract(a, b) << endl;
  return 0;
}
// add.cpp
int add(int a, int b) {
  return a + b;
}
// subtract.cpp
int subtract(int a, int b) {
  return a - b;
}

在该示例中,我们分别定义了 mainaddsubtract 三个函数,并在 main 中调用这两个函数。

  1. 使用 CMake 进行构建:
mkdir build && cd build
cmake ..
make

执行以上命令之后,在 build 文件夹中将会生成可执行文件 calculator

示例二:C 语言工程的构建

以下是一个 C 语言工程的示例,以输出素数的项目为例。

  1. 在项目根目录下创建 CMakeLists.txt 文件,并添加以下内容:
# 指定 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 指定工程名称
project(prime)

# 添加源文件
add_executable(prime main.c)

在该示例中,我们通过 add_executable 指定了一个 main.c 源文件,并以 prime 为名称生成可执行文件。

  1. 在项目根目录下新建 main.c 文件,内容如下:
#include <stdio.h>

int main() {
  int i, j;
  for (i = 2; i < 101; i++) {
    for (j = 2; j <= i; j++) {
      if (i == j) {
        printf("%d ", i);
      } else if (i % j == 0) {
        break;
      }
    }
  }
  return 0;
}

在该示例中,我们使用两个 for 循环判断素数并输出。

  1. 使用 CMake 进行构建:
mkdir build && cd build
cmake ..
make

执行以上命令之后,在 build 文件夹中将会生成可执行文件 prime

结语

本文只是介绍了 CMake 的基本用法,更多高级特性和用法请参考官方文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:超详细的cmake入门教程 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言统计字符个数代码分享

    C语言统计字符个数代码分享 概述 统计字符个数是C语言编程中的一项基础操作,本文将分享一份C语言代码,实现统计文件中字符个数的功能。 实现过程 读取文件 首先需要打开文件,并读取其中的内容。在C语言中,可以使用stdlib库函数fopen和fclose分别打开和关闭文件,使用stdio库函数fread读取文件中的内容。 FILE *fp; // 文件指针 f…

    C 2023年5月24日
    00
  • 电脑越来越卡怎么办 手写CCleaner电脑垃圾文件清理规则

    关于“电脑越来越卡怎么办”这个问题,我们可以通过手写CCleaner电脑垃圾文件清理规则来优化电脑性能。以下就是详细的攻略: 步骤一:下载和安装CCleaner 首先,我们需要从官方网站下载并安装CCleaner。下载链接:https://www.ccleaner.com/ccleaner/download 步骤二:运行CCleaner 安装完成后,我们可以…

    C 2023年5月23日
    00
  • JQuery ajax返回JSON时的处理方式 (三种方式)

    当使用 JQuery 发送 ajax 请求获取 JSON 数据时,我们需要对返回数据进行处理。下面总结了三种常用的方式:使用回调函数、使用 Promise 对象和使用 async/await。 使用回调函数 使用回调函数处理返回的 JSON 数据是最常见的方式,可以通过在 $.ajax() 函数的 success 属性中指定一个回调函数来实现。该回调函数会在…

    C 2023年5月23日
    00
  • 如何基于 Blueprint 在游戏中创建实时音视频功能

    关于如何基于 Blueprint 在游戏中创建实时音视频功能,我可以提供以下完整攻略: 1. 接入实时音视频 SDK 首先,需要接入实时音视频 SDK。这里以腾讯云实时音视频 SDK 为例,具体接入流程可以参考腾讯云官方文档。 2. 使用 Blueprint 创建 UI 界面 在 Unreal Engine 的 Blueprint 中创建 UI 界面,用于显…

    C 2023年5月23日
    00
  • Objective-C基础 自定义对象归档详解及简单实例

    Objective-C基础:自定义对象归档详解及简单实例 1. 什么是归档? 归档是将对象保存到文件中,以便以后可以恢复对象时使用的一种技术。在iOS开发中,归档通常用于将自定义对象保存到本地,如用户数据、游戏进度等。 2. 归档的分类 归档分为两种:文件归档和系统归档。 文件归档:将对象保存到指定的文件中。 系统归档:将对象保存到系统的偏好设置、键值存储、…

    C 2023年5月22日
    00
  • C语言字符串函数介绍与模拟实现详解

    C语言字符串函数介绍与模拟实现详解 简介 C语言中的字符串是以字符数组的形式保存的,而字符串函数则是对这些字符数组执行一些常见的字符串操作的函数库。本文将介绍常见的C语言字符串函数,并演示如何模拟实现这些函数。 常见字符串函数 strlen() strlen()函数用于返回字符串的长度,即其包含的字符个数,不包括字符串末尾的’\0’。 示例: #includ…

    C 2023年5月23日
    00
  • C语言实现图形化打砖块游戏

    下面是详细讲解“C语言实现图形化打砖块游戏”的完整攻略。 1. 准备工作 在开始编写代码之前,需要先安装一些必要的工具和库,包括:- Code::Blocks软件(用来编写C语言程序、调试和编译)- Simple DirectMedia Layer(SDL)库(用来处理图形图像、事件和音效等)- SDL_image库(用来加载和处理各种图像格式)- SDL_…

    C 2023年5月23日
    00
  • 在nodeJs中如何修改json文件中的数据

    修改 JSON 文件中的数据在 Node.js 中有多种实现方式,下面我将介绍其中两种常用的方法。 方法一:使用Node.js内置的fs模块 1. 使用fs.readFile()方法读取JSON文件 fs.readFile() 方法可以读取 JSON 文件的内容,并返回一个字符串类型的 JSON 数据。 const fs = require(‘fs’); f…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部