实例分享cmake编译一个简单c++项目(demo)

作为网站作者,我很乐意为大家详细讲解如何使用CMake编译一个简单的C++项目。在本文中,我将为您提供一些步骤,以帮助您了解如何使用CMake生成可执行文件、静态库或共享库。我们将会涉及以下几个方面:

  1. 概述
  2. 安装CMake
  3. 创建C++项目
  4. 编写CMakeLists.txt
  5. 配置并生成项目
  6. 示例说明
  7. 总结

1. 概述

CMake是一个跨平台的、开源的构建工具,可以自动生成本地构建环境文件,它使得构建C++项目变得更容易。与其他编译工具相比,CMake具有灵活、可扩展的编码语言,可快速构建大型项目。

在本文中,我们将演示如何使用CMake编译一个简单的C++项目。

2. 安装CMake

在开始之前,您需要先安装CMake。您可以从官网下载最新的稳定版本(https://cmake.org/download/)。

3. 创建C++项目

假设我们有一个简单的项目,其中包含两个源代码文件:main.cpp和math.cpp,再加上一个头文件:math.h。我们的目标是生成一个可执行文件。

项目目录结构如下:

/demo
----/src
--------/main.cpp
--------/math.cpp
--------/math.h
----CMakeLists.txt

4. 编写CMakeLists.txt

接下来,我们需要编写一个名为CMakeLists.txt的文件,告诉CMake如何编译我们的项目。该文件应位于项目的根目录下。

示例内容代码如下:

cmake_minimum_required(VERSION 3.16)
project(demo)

set(CMAKE_CXX_STANDARD 17)

add_executable(demo src/main.cpp src/math.cpp)

该文件包含三个主要组件:

  • cmake_minimum_required:指定至少需要的CMake版本。
  • project:指定要构建的项目的名称。
  • add_executable:指定源代码文件和目标名称。

在上述代码中,我们设置了最低要求为CMake 3.16,并命名了项目为demo。我们将使用C++ 17进行编译,并指定了两个源代码文件:src/main.cpp和src/math.cpp。

对于头文件,由于order of including的原因,我们无须明确指定。当我们建立demo头文件时,可以参照 src/math.h 中的写法,在main.cpp文件中add_executable时,将头文件加入。

另外,如果您有其他需要使用的关联库文件,也可以在此处添加。例如,如果您需要使用OpenGL库,请添加以下代码:

find_package(OpenGL REQUIRED)
target_link_libraries(demo OpenGL::GL)

5. 配置并生成项目

现在,我们已经创建了C++项目和CMakeLists.txt文件,接下来,我们需要使用CMake构建项目,生成可执行文件。

先在终端进入到项目的根目录,然后使用以下命令进行配置:

cmake -S . -B build/

其中,-S .表示源代码的目录为当前目录,而-B build/则表示输出的文件将存放在build目录中。

接下来,使用以下命令生成可执行文件:

cmake --build build/

构建完成后,您可以在build目录下看到程序的可执行文件。

6. 示例说明

我们假设我们需要编写一个数学库,其中包含一个Add函数。然后,我们创建一个C++项目,并将math.cpp文件中的Add函数定义为:

#include "math.h"

int Add(int x, int y)
{
    return x + y;
}

在主函数main.cpp中,我们想调用Add函数。我们在头文件math.h中定义了该函数的原型:

int Add(int x, int y);

我们需要声明一个源文件来调用Add函数:

#include "math.h"

int main()
{
    int result = Add(1, 2);
    return 0;
}

接下来,我们需要更新CMakeLists.txt文件,并将生成共享库。以下是更新后的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.16)
project(demo)

set(CMAKE_CXX_STANDARD 17)

add_library(math SHARED src/math.cpp)

add_executable(demo src/main.cpp)
target_link_libraries(demo math)

我们使用add_library命令来生成共享库,并使用 target_link_libraries 命令将库与可执行文件链接。我们再次使用以下命令进行配置和构建:

cmake -S . -B build/
cmake --build build/

这次,CMake将生成共享库和可执行文件。如果您想将生成的共享库安装到系统目录,可以使用以下命令:

cmake --install build/

7. 总结

CMake是一个非常好用的跨平台构建工具。使用CMake可以简化C++项目的构建过程,提高开发效率。在本文中,我们对使用CMake编译C++项目进行了详细的介绍,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:实例分享cmake编译一个简单c++项目(demo) - Python技术站

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

相关文章

  • Java中json使用方法_动力节点Java学院整理

    Java中json使用方法_动力节点Java学院整理 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于描述复杂数据结构。JSON格式兼容JavaScript,Python,C#等多种编程语言,逐渐替代了XML成为当今最常用的数据交换格式之一。 JSON的语法 JSON的语法是类似于JavaScr…

    C 2023年5月23日
    00
  • C语言模拟实现strstr函数的示例代码

    C语言中的strstr函数是用来查找一个字符串中是否包含另一个字符串的函数,其原型定义如下: char *strstr(const char *haystack, const char *needle); 其中,haystack表示要查找的字符串,needle表示要搜索的子字符串。该函数返回子字符串在要查找的字符串中第一次出现的位置的指针,如果没有找到,则返…

    C 2023年5月24日
    00
  • python求解三角形第三边长实例

    接下来我将详细讲解“Python求解三角形第三边长实例”的完整攻略,包括以下内容: 题目描述 实现思路 代码实现 示例说明 1. 题目描述: 给出三角形两条边的长度,求第三条边的长度。 2. 实现思路: 假设已知三角形两边分别为a、b,其夹角为C。则可通过以下公式求解第三边长: c = math.sqrt(a ** 2 + b ** 2 – 2 * a * …

    C 2023年5月22日
    00
  • java 实现黄金分割数的示例详解

    Java 实现黄金分割数的示例详解 什么是黄金分割数 黄金分割数又称黄金比例,是一种在数学、美术及建筑等领域中广泛存在的比例关系。黄金分割比例是指将一条线段分成两条部分,使其中一条部分与全长之比等于另一条部分与这条部分之比。 数学上,黄金分割比例为 (根号5-1)/2,约等于 0.6180339887。 如何实现黄金分割数 在 Java 中,可以使用以下代码…

    C 2023年5月22日
    00
  • C语言 循环

    C语言循环的使用攻略 在C语言编程中,循环结构是一类非常重要的语法工具。它能够帮助程序员快速高效地处理重复性质的任务,以及操作数组等数据结构。本文将详细介绍C语言中的循环结构,包括语法、使用技巧、常见应用场景以及示例说明。 语法实现 C语言的循环结构有三种:for、while和do…while,它们的语法实现分别如下: for循环 for(循环变量的初始…

    C 2023年5月9日
    00
  • C++实现十进制数转为其它进制数

    关于C++实现十进制数转为其他进制数的攻略,我将分为以下几个步骤进行介绍: 确定需要转换的十进制数以及目标进制数 使用循环和取模运算将十进制数转为目标进制数的各位数字 反转转换后的数字(可选) 输出转换后的数字(可选) 接下来我将详细讲解每一步的实现过程,并提供两个示例说明。 步骤1:确定需要转换的十进制数以及目标进制数 在进行进制转换之前,需要明确需要转换…

    C 2023年5月23日
    00
  • C++实现团购订单管理系统

    C++实现团购订单管理系统 概述 本团购订单管理系统有如下功能: 添加新订单 修改已有订单 删除已有订单 查看所有订单 根据订单号查看特定订单 实现步骤 步骤一:定义订单类 class Order { public: string orderNo; // 订单号 string productName; // 商品名称 int quantity; // 数量 …

    C 2023年5月24日
    00
  • C++之Boost::array用法简介

    Boost::array用法简介 介绍 Boost::array是Boost库中的一个Header-only库,提供了一个模板类,用于替代内置的数组类型。 与内置数组类型不同,Boost::array支持STL风格的迭代器,并且具有常量大小,也能够作为函数参数传递,因此在编写C++代码时,Boost::array是一个很好的选择。 使用方法 Boost::a…

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