cmake tutorial

2023-11-16

Tutorial-1

最基本的项目是从源代码构建可执行文件, 对于简单的项目,三行CMakeLists.txt足够了,这就是本教程的起点,在Step1目录下创建一个CMakeLists.txt, 如下所示:

cmake_minimum_required(VERSION 3.10)
# 设置project的名字
project(Tutorial)
# 添加执行
add_executable(Tutorial tutorial.cxx)

这个例子中CMakeLists.txt文件中使用了小写命令。CMake支持大小写混合命令。tutorial.cxx是一个计算数字平方根的文件:

#include <iostream>
#include <math.h>
using namespace std;

void sq(double n)
{
    double res = sqrt(n);
    cout << res << endl;
}

int main() {
    sq(3.112314564);
}

构建和运行

该有的都有了, 现在可以构建和运行我们的项目 tutorial了,首先运行cmake可执行文件,或者cmake-gui来配置(作者:我这里用的是命令行)。

mkdir Step1_build

cd Step1_build

cmake ../

会在该目录生成一个 Makefile文件,我们只要

make就会生成可执行文件。

添加版本号和配置头文件

接下来我们要添加版本号,为我们的项目配置版本号。

修改project :

project(Tutorial VERSION 1.0)

然后,配置一个头文件,将版本号传递给代码

configure_file(TutorialConfig.h.in TutorialConfig.h)

由于配置文件将要被写入二叉树中,我们必须把目录放到搜索include文件的路径表中。在末尾加入CMakeLists.txt:

target_include_directories(Tutorial PUBLIC ${PROJECT_BINARY_DIR})

然后创建TutorialConfig.h.in写入:

#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

当CMake配置这个头文件时, @Tutorial_VERSION_MAJOR@和@Tutorial_VERSION_MINO@的值将会被替换。

cxx包含已配置的头文件TutorialConfig.h。

最后,让我们通过更新教程来打印可执行文件的名称和版本号。cxx如下:

 if (argc < 2) {
    // report version
    std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
              << Tutorial_VERSION_MINOR << std::endl;
    std::cout << "Usage: " << argv[0] << " number" << std::endl;
    return 1;
  }

指定C++标准

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

Tutorial-1结束

:)
转载请说明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake tutorial 的相关文章

随机推荐

  • Android Camera、Camera2详解

    前言 Android5 0之前使用android hardware包下的Camera类进行拍照 录视频等功能 5 0以后 新增了android hardware camera2包 利用新的机制 新的类进行拍照 录视频 使用Camera 一
  • 【Java基础知识 6】Java异常详解

    目录 一 Java异常简介 1 Exception和Error 2 NoClassDefFoundError 和 ClassNotFoundException 有什么区别
  • antd 中 Table表格 合并行

    1 首先获取所要合并行的column 去除每一行数据的rowkey 本例取的是Name这一列 2 当Name的值在多个页面出现时需重新记录rowSpan 3 合并column中具有相同Name的行 结果图如下 表格数据 const Data
  • iframe嵌入https地址,浏览器却访问http协议后不识别报错

    当时本地嵌入此地址正常访问 部署测试环境后报错 iframe嵌入必须是https地址 由于当时https域名配置的证书不安全 浏览器认为此链接不安全 所以浏览器访问了http协议 就出现了这个报错 我的解决方式是可以和运维沟通配置安全证书或
  • java对象引用及对象赋值-java对象克隆

    假如说你想复制一个简单变量 很简单 int apples 5 int pears apples 不仅仅是int类型 其它七种原始数据类型 boolean char byte short float double long 同样适用于该类情况
  • fatal: unable to access ‘https://github.com/****.git/‘: Unknown SSL protocol error

    fatal unable to access https github com git Unknown SSL protocol error 背景 如标题 git push git pull 都出现上面的问题 尝试 1 由于使用其他的项目还
  • 数据仓库-日期维度表的设计与实现

    时间维度表的制作 1 需求背景 在大数据分析模块中 我们需要从不同的维度分析主题表 包括常用的公用维度 时间维 地区维度 教育信息维 以及各种各样的业务维度 员工维度 部门维度 业务维度就是我们从哪些角度去分析业务过程 本文就是做一张常用时
  • 高版本CubeIDE下使用DAP-LINK教程

    高版本CubeIDE下使用DAP LINK教程 背景 笔者此前在CSDN上写了两篇文章详述了如何在STM32CubeIDE下使用DAPLINK 在Stm32CubeIDE环境下使用DAP Link仿真 通过External Tools在ST
  • CentOS 几种重启方式的区别

    CentOS 几种重启方式的区别 Linux centos重启命令 1 reboot 普通重启 2 shutdown r now 立刻重启 root用户使用 3 shutdown r 10 过10分钟自动重启 root用户使用 4 shut
  • XAML三个顶级元素以及窗体的外观和位置

    XAML三个顶级元素介绍 Window 窗口 UserControl 用户控件 Page 把窗体以网页形式展现 注意 在XAML页面中我们只能有一个顶级元素 而且顶级元素只能有一个子元素 所以我们要使用布局控件 窗体的外观和位置 窗口的外观
  • 怎么把MySQL的数据存到区块链_区块链存储数据的方式是什么

    区块链存储数据的方式 分布式数据存储 区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的新型应用模式 从本质上讲 它是一个共享数据库 存储于其中的数据或信息 具有不可伪造 全程留痕 可以追溯 公开透明 集体维护等特征 本教
  • springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用

    在springmvc xml中 经常会配置
  • 2036: [蓝桥杯2022初赛] 统计子矩阵(二维前缀和,一维前缀和)

    2036 蓝桥杯2022初赛 统计子矩阵 内存限制 256 MB 时间限制 1 S 标准输入输出 题目类型 传统 评测方式 文本比较 上传者 外部导入 提交 310 通过 74 题目描述 给定一个 N M 的矩阵A 请你统计有多少个子矩阵
  • linux安装mysql

    安装环境 工具 1 Linux CentOS 7 4版 2 mysql 8 0 12 el7 x86 64 tar gz 安装步骤 参考 https dev mysql com doc refman 8 0 en installing ht
  • 【满分】【华为OD机试真题2023 JS】寻找相似单词

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 寻找相似单词 知识点字符串排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个可存储若干单词的字典 找出指定单词的所有相似单词 并且按照单词名称从小到大
  • 人工智能-马尔可夫模型

    马尔可夫与马尔科夫都可以 所以也别纠结 马尔可夫模型 Markov Model 是一种统计模型 广泛应用在语音识别 词性自动标注 音字转换 概率文法等各个自然语言处理等应用领域 经过长期发展 尤其是在语音识别中的成功应用 使它成为一种通用的
  • java.util.LinkedHashMap cannot be cast to com.XXX.XXX

    ResquestBody的HashMap转List时错误java util LinkedHashMap cannot be cast to com XXX XXX RequsetBody Map
  • 五个温度带的分界线_亚热带,暖温带,到底是些什么带?

    在地理课上 讲到有关气候的内容时 经常会提到各种 带 例如暖温带 中温带 寒温带 你能清晰地分清谁是谁吗 首先 我们先来澄清一个概念 温度带和热量带 很多人分不清这两个词 但实际上 它们的内在含义是大致相同的 但是如果细究 两者的划分方式是
  • 服务器间数据传输的四种方式

    scp 优点 简单方便 安全可靠 支持限速参数 缺点 不支持排除目录 用法 scp就是secure copy 是用来进行远程文件拷贝的 数据传输使用 ssh 并且和ssh 使用相同的认证方式 提供相同的安全保证 scp 参数 lt 源地址
  • cmake tutorial

    Tutorial 1 最基本的项目是从源代码构建可执行文件 对于简单的项目 三行CMakeLists txt足够了 这就是本教程的起点 在Step1目录下创建一个CMakeLists txt 如下所示 cmake minimum requi