使用CMake构建一个简单的C++项目的实现

 更新时间:2023年10月23日 08:47:30   作者:AoDeLuo  
CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,本文主要介绍了使用CMake构建一个简单的C++项目,具有一定的参考价值,感兴趣的可以了解一下

一. 构建一个简单的项目

最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目,只需要一个包含三个命令的CMakeLists.txt文件。注意:虽然CMake支持大写、小写和混合大小写命令,但小写命令是首选命令,并将在整个教程中使用。

任何项目的顶级CMakeLists.txt都必须通过使用CMake_minimum_required()命令指定最低CMake版本来启动。这将建立策略设置,并确保以下CMake函数使用兼容版本的CMake运行。为了启动一个项目,我们使用project()命令来设置项目名称。每个项目都需要此调用,并且应在cmake_minimum_required()之后立即调用。正如我们稍后将看到的,此命令还可以用于指定其他项目级别的信息,如语言或版本号。最后,add_executable()命令告诉CMake使用指定的源代码创建一个可执行文件

二. 构建过程

1. 创建程序源文件

源文件包含两个:

  • tutorial.cxx
  • TutorialConfig.h.in
// TutorialConfig.h.in文件内容
// 定义了两个变量,可以在cmake构建项目时进行相应的替换
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
// tutorial.cxx文件内容
// 计算输入参数的平方根
#include <cmath>
#include <iostream>
#include <string>
#include "TutorialConfig.h"

int main(int argc, char* argv[])
{
  if (argc < 2) {
    // 打印版本信息
	std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
		      << Tutorial_VERSION_MINOR << std::endl;
    std::cout << "Usage: " << argv[0] << " number" << std::endl;
    return 1;
  }

  // 转换输入参数为double类型
  const double inputValue = std::stod(argv[1]);

  // 计算平方根
  const double outputValue = sqrt(inputValue);
  std::cout << "The square root of " << inputValue << " is " << outputValue
            << std::endl;
  return 0;
}

2. 编写CMakeList.txt文件

# 设置CMake最低版本为3.10
cmake_minimum_required(VERSION 3.10)

# 设置项目的版本为1.0
project(Tutorial VERSION 1.0)

# 设置变量CMAKE_CXX_STANDARD为11
# 设置变量CMAKE_CXX_STANDARD_REQUIRED为True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 通过使用configure_file将TutorialConfig.h.in中的内容拷贝到TutorialConfig.h中,并将其中需要替换的部分进行替换
configure_file(TutorialConfig.h.in TutorialConfig.h)

# 创建一个可执行文件,名为Tutorial.exe
add_executable(Tutorial tutorial.cxx)

# 使用target_include_directories指明程序的头文件所在目录
target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")

3. 构建项目并编译源代码

未构建项目的情况下,源文件夹目录中仅有三个文件,如下:

在程序原文件夹中创建一个文件夹,用于保存构建的项目

mkdir Step1_build

进入创建好的文件夹中,使用cmake构建项目

cd Step1_buildcmake ..

使用cmake生成项目,生成可执行文件

cmake --build .

进入构建文件夹(Step1_build),执行可执行程序Tutorial.exe

cd DebugTutorial 10

附件

源代码下载

到此这篇关于使用CMake构建一个简单的C++项目的实现的文章就介绍到这了,更多相关CMake构建C++项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++20新特性之Range库

    C++20新特性之Range库

    本文主要介绍了C++20新特性之Range库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-06-06
  • 在while中使用cin>>a 为条件及注意事项说明

    在while中使用cin>>a 为条件及注意事项说明

    这篇文章主要介绍了在while中使用cin>>a 为条件及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解在VScode中添加代码块(含C++指令生成代码)

    详解在VScode中添加代码块(含C++指令生成代码)

    这篇文章主要介绍了详解在VScode中添加代码块(含C++指令生成代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Opencv分水岭算法学习

    Opencv分水岭算法学习

    这篇文章主要为大家详细介绍了Opencv分水岭算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 详解C++编程中的重载流插入运算符和流提取运算符

    详解C++编程中的重载流插入运算符和流提取运算符

    这篇文章主要介绍了详解C++编程中的重载流插入运算符和流提取运算符,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • c++实现排序算法之希尔排序方式

    c++实现排序算法之希尔排序方式

    这篇文章主要介绍了c++实现排序算法之希尔排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C++超详细分析讲解内联函数

    C++超详细分析讲解内联函数

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数
    2022-06-06
  • 用C语言实现三子棋

    用C语言实现三子棋

    这篇文章主要为大家详细介绍了用C语言实现三子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++中的Reactor原理与实现

    C++中的Reactor原理与实现

    reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景,每种服务在服务端可能由多个方法组成,这篇文章主要介绍了Reactor原理与实现,需要的朋友可以参考下
    2022-07-07
  • C语言中文件操作Error处理的方法示例

    C语言中文件操作Error处理的方法示例

    在 C 语言中,ferror() 是一个内置函数,用于在文件操作期间检查文件是否发生错误,它提供了一种简单的方法,在你的 C 程序中进行文件操作时不会中断,本文给大家介绍了C语言中文件操作Error处理的方法,需要的朋友可以参考下
    2025-10-10

最新评论