CMake Tutorial Step1

2023-11-19

CMake Tutorial Step1

参考资料Step 1: A Basic Starting Point — CMake 3.26.3 Documentation

Tutorial工程官方Tutorial工程

开发环境:CLion

CMake简介

方便起见直接问New Bing。

在这里插入图片描述

为什么要学习CMake?

CMake的最大特点和Qt一样,跨平台工具,因此学习它可以应用在大多数场合,投入产出比很高。

步骤一:一个基础的起点

本章一共3个练习,分别用于实现3个目标:

  • 练习1:构建一个基础的工程
  • 练习2:指定C++标准版本
  • 练习3:增加一个软件版本号和配置头文件

练习1:构建一个基础的工程

背景:

假如现在你想练习C++编程,但是不想使用Visual Studio或Qt Creator这样的图像化集成工具。

目标:

理解如何创建一个简单的CMake工程。

辅助资源:
add_executable()
cmake_minimum_required()
project()
需要编辑的文件:

CMakeLists.txt

解决方案
# TODO 1: Set the minimum required version of CMake to be 3.10
cmake_minimum_required(VERSION 3.25)

# TODO 2: Create a project named Tutorial
project(Tutorial)

# TODO 3: Add an executable called Tutorial to the project
# Hint: Be sure to specify the source file as tutorial.cxx
add_executable(Tutorial tutorial.cxx)

cmake_minimum_required:指定cmake至少应该是某个版本以上

project:指定工程名字,相当于创建一个工程

add_executable:指定可执行文件的名字以及生成它的源文件

提示:上面三行是所有CMake工程都要有的,其中 add_executable 在实际工程中指定的源文件会是成百上千个,因此后面多半会被替换成变量,变量中包含工程中所有需要用到的源文件。

练习2:指定C++标准版本

背景:

假如现在你已经把最古老的C++ 98学习完了,现在想继续学习C++ 11,17,20等更新的标准。

目标:

增加C++11特性,使工程可以使用新标准的语法。

辅助资源:
CMAKE_CXX_STANDARD
CMAKE_CXX_STANDARD_REQUIRED
set()
需要编辑的文件:

CMakeLists.txttutorial.cxx

解决方案
  1. 先在 tutorial.cxx 文件中使用C++ 11的语法,此时如果你编译它会报错
// convert input to double
// TODO 4: Replace atof(argv[1]) with std::stod(argv[1])
const double inputValue = std::stod(argv[1]);
  1. 删除 tutorial.cxx 文件中的这一行,因为原先的 atof(argv[1]) 不用了
#include <cstdlib> // TODO 5: Remove this line
  1. CMakeLists.txt 中添加这两行,明确告诉CMake要用C++ 11来构建工程
# TODO 6: Set the variable CMAKE_CXX_STANDARD to 11
#         and the variable CMAKE_CXX_STANDARD_REQUIRED to True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

提示:需要注意的是 set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED True) 这两行需要放在 add_executable(Tutorial tutorial.cxx) 上面

练习3:增加一个软件版本号和配置头文件

背景:

软件工程上一般都会给软件分配一个版本号,用于版本管理和缺陷追溯等功能。CMake可以使这个过程变得很方便。

目标:

定义和输出软件版本号。

辅助资源:
<PROJECT-NAME>_VERSION_MAJOR
<PROJECT-NAME>_VERSION_MINOR
<PROJECT-NAME>_VERSION_PATCH
<PROJECT-NAME>_VERSION_TWEAK
configure_file()
target_include_directories()
需要编辑的文件:

CMakeLists.txttutorial.cxx

解决方案
  1. project() 指定工程名时,指定 VERSION 版本号

    # TODO 7: Set the project version number as 1.0 in the above project command
    project(Tutorial VERSION 1.2.3.4)
    
  2. configure_file() 指令将指定的版本号从TutorialConfig.h.in复制进TutorialConfig.h中

    # TODO 8: Use configure_file to configure and copy TutorialConfig.h.in to
    #         TutorialConfig.h
    configure_file(TutorialConfig.h.in TutorialConfig.h)
    

    提示:当前版本号只在 CMakeLists.txt 中有指定,TutorialConfig.h.in 如何能知道版本号呢?TutorialConfig.h.in 中一定需要编写一些内容,使其获得版本号

  3. 让工程包含 TutorialConfig.h 所在的头文件路径

    # TODO 9: Use target_include_directories to include ${PROJECT_BINARY_DIR}
    target_include_directories(Tutorial PUBLIC ${PROJECT_BINARY_DIR})
    
  4. TutorialConfig.h.in 文件中编写内容,使其可以获得 CMakeLists.txt 中指定的版本号

    // the configured options and settings for Tutorial
    // TODO 10: Define Tutorial_VERSION_MAJOR and Tutorial_VERSION_MINOR
    #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
    #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
    #define Tutorial_VERSION_PATCH @Tutorial_VERSION_PATCH@
    #define Tutorial_VERSION_TWEAK @Tutorial_VERSION_TWEAK@
    
  5. tutorial.cxx 文件中包含 TutorialConfig.h 头文件

    // TODO 11: Include TutorialConfig.h
    #include "TutorialConfig.h"
    
  6. tutorial.cxx 中输出版本号

    if (argc < 2) {
        // TODO 12: Create a print statement using Tutorial_VERSION_MAJOR
        //          and Tutorial_VERSION_MINOR and Tutorial_VERSION_PATCH
        //			and Tutorial_VERSION_TWEAK
        std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
                  << Tutorial_VERSION_MINOR << "." << Tutorial_VERSION_PATCH
                  << "." << Tutorial_VERSION_TWEAK << std::endl;
        std::cout << "Usage: " << argv[0] << " number" << std::endl;
        return 1;
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake Tutorial Step1 的相关文章

随机推荐

  • 【编译】gcc make cmake Makefile CMakeList.txt 关系、使用

    文章目录 一 关系 二 gcc 2 1 编译过程 2 2 编译参数 2 3 静态库和动态库 1 后缀名 2 联系与区别 2 4 GDB 调试器 1 常用命令 三 make makefile 四 cmake cmakelist 4 1 语法特
  • Android常用的加密算法

    一 MD5 MD5可以说是最基本最常用的加密算法了 还依稀记得在校招面试的时候被问到过 MD5信息摘要算法 MD5 Message Digest Algorithm 算法能将任意大小 格式的文字或文件进行加密从而产生 128 bit 16
  • 提高企业开发效率的优质工具:快速开发平台

    现代企业管理软件的功能越来越复杂 随着新技术作为管理手段不断被引入到管理软件中 使得管理软件的开发的难度在逐年的增加 尤其是企业需要的很多的功能都是个性化的 这让企业管理软件的开发少则半年 多则1年以上 而且失败率非常高 即使采用敏捷开发方
  • 使用 django-bootstrap3 库

    使用 django bootstrap3 库 1 配置 下载 pip install django bootstrap3 settings配置 在install apps中加上 bootstrap3 2 使用 在html文件中使用 表单 写
  • 如何的keil试试调试中,看逻辑分析仪Logic viwer

    在调试过程中 可以使用keil自带的逻辑分析仪查看变量的试试信息 减少串口输出 提高部分cpu的效率 可以添加以下信息 1 gpio引脚 2 全局变量 全局静态变量 局部变量是不行的 然后 添加变量后 需要右键设置 如下 g u32tick
  • el-table表格可拖拽实现

    druggerTable js function global factory global BmTableDrag factory global window function global function BmTableDrag op
  • win10系统镜像下载及在VMware虚拟机上创建win10虚拟机

    文章目录 前言 一 下载win10系统 二 配置win10系统虚拟机 创建新的虚拟机 注意事项 前言 网上很多win10镜像资源都没法用 不是下载不了 就是用不了 尤其公众号还有一堆套路 浪费自己很多时间 无奈 干脆自己做一个镜像 肯定好用
  • 【华为OD机试】数字游戏(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 小明玩一个游戏 系统发1 n张牌 每张牌上有一个整数 第一张给小明 后n张按照发牌顺序排成连
  • 数字化转型系列主题:数字化建设总体规划蓝图

    本文转自 CIO之家 数字化转型应该是千人千面 因为每家企业的难点痛点不一样 所以每家企业的转型路径都不尽相同 数字化转型不是为了转型而转型 必须是围绕解决企业最大痛点 以它做切入点 回报才最快 投入产出比才最高 所以常想 数字化转型第一件
  • 于仕琪的人脸检测算法

    于仕琪的人脸检测算法 对Windows下的商业使用也免费 刚更新了一次算法 正面人脸检测的角度范围从 40 40 度提升到 60 60 度 检测角度变大但计算量不增加 多视角人脸检测速度提升2倍 速度对比 在同样的条件下OpenCV 47
  • // 计算出给定矩阵中主对角线元素的和

    一 题目 计算出给定矩阵中主对角线元素的和 二 代码 include
  • 数据结构与算法学习总结(六)——字符串的模式匹配算法

    基本概念 字符串是一种特殊的线性表 即元素都是 字符 的线性表 字符是组成字符串的基本单位 字符的取值依赖于字符集 例如二进制的字符集为0 1 则取值只能为 0 1 再比如英语语言 则包括26个字母外加标点符号 例如 abcde 就是一个字
  • python遍历指定目录并打印层级结构

    import os def func filepath n 获取路径 files os listdir filepath for file in files 拼接路径 f d os path join filepath file 判断路径是
  • STM32CubeMX安装与使用

    STM32CubeMX 是 ST 公司近几年来大力推荐的STM32 芯片图形化配置工具 允许用户使用图形化向导生成C 初始化代码 支持多种工具链 比如MDK IAR TrueStudio等 可以大大减轻开发工作时间 提高开发效率 STM32
  • C++ Primer Plus 书之--C++ 模板类深究2--模板类和友元

    模板类和友元 模板类声明也可以有友元 模板的友元分为3类 1 非模板友元 2 约束模板友元 即友元的类型取决于类被实例化时的类型 3 非约束模板友元 即友元的所有具体化都是类的每一个具体化的友元 1 模板类的非模板友元函数 在模板类中将一个
  • 创建型模式,共五种

    设计模式 Design Patterns 可复用面向对象软件的基础 设计模式 Design pattern 是一套被反复使用 多数人知晓的 经过分类编目的 代码设计经验的总结 使用设计模式是为了可重用代码 让代码更容易被他人理解 保证代码可
  • scikit-image 0.17.2计算PSNR、SSIM、MSE

    版本及调用方式 scikit image 0 18 0之前版本的调用方式如下 from skimage measure import compare mse compare psnr compare ssim scikit image 0
  • 数字逻辑练习题(五) 分析下图所示组合逻辑电路的功能

    分析下图所示组合逻辑电路的功能 一 题目描述 分析下图所示组合逻辑电路的功能 要求 1 写出该电路输出 L1 L2 L3 的逻辑函数表达式 2 列出真值表 3 描述该电路的功能 二 题目解答 1 列出逻辑表达式 2 列出真值表 3 电路功能
  • 开发工程中遇到的BUG

    1 Couldn t communicate with a helper application in Xcode 7 问题一 Couldn t communicate with a helper application in Xcode
  • CMake Tutorial Step1

    CMake Tutorial Step1 参考资料 Step 1 A Basic Starting Point CMake 3 26 3 Documentation Tutorial工程 官方Tutorial工程 开发环境 CLion CM