cmake简单使用

2023-11-18

概述

cmake是一种跨平台编译工具,除了可以编译c,c++代码也可以编译其他语言的代码,其主要就是通过cmake执行CMakeLists.txt从而生成Makefile。下面就自己了解到的简单的一点知识,做以记录。更多可查看官网:https://cmake.org。

cmake简单使用

  1. 创建项目文件夹。
    在终端输入指令:mkdir testCmake-helloworld
  2. 创建项目文件及CMakeLists.txt。
    在终端输入:
    cd testCmake-helloworld
    touch CMakeLists.txt
    vim main.cpp
    打开main.cpp后,在其中写入如下内容:
    main.cppmain.cpp
#include <iostream>

using namespace std;

int main(int argc,char*argv[])
{
	cout<<"hello world!!"<<endl;
	return 0;
}

保存后退出。
终端输入:vim CMakeLists.txt
向CMakeLists.txt写入如下内容:

cmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello main.cpp)

保存退出,查看当前的文件列表:
$ ls
CMakeLists.txt build-hello-cmake main.cpp
可以看到有两个文件CMakeLists.txt 和main.cpp,一个文件夹build-hello-cmake,此时可以进入到构建目录build-hello-cmake中,输入下述指令:

cmake ..

终端会显示如下:

CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/admin/Program/testCmake-helloworld/build-hello-cmake

接着终端输入:

make

终端显示如下:

[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

此时构建完成,在目录build-hello-cmake中生成可执行程序hello。当前路径下执行下述指令:

# admin @ bogon in ~/Program/testCmake-helloworld/build-hello-cmake [17:21:33] 
$ ./hello
hello world!!

会输出程序的运行结果。
上述是cmake执行构建的过程,总体来说就是下列指令:

mkdir 构建目录名
cd 构建目录名
cmake CMakeLists.txt所在的路径
make 

其构建项目最常用的四句指令就是上述所写。首先在项目目录下创建一个空文件夹,作为构建目录,即:mkdir 构建目录名;然后进入构建目录,即:cd 构建目录名;接下来执行cmake,但是在cmake的后面需要指明CMakeLists.txt所在的路径,最后执行make指令,整个项目生成可执行程序。
当不在构建目录里执行cmake时,可以按照下述方法来执行cmake:

admin @ bogon in ~/Program/testCmake-helloworld [17:31:29] 
$ cmake -S ./ -B ./build-hello-cmake 
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/admin/Program/testCmake-helloworld/build-hello-cmake

其中-S指明了源文件所在的路径,-B指明了构建生成的文件所在的路径。
这样就可以在非构建目录下执行cmake,但生成的文件依旧存入到构建目录中。同样接下来也在项目目录下使用指令make,指令如下:

# admin @ bogon in ~/Program/testCmake-helloworld [17:33:09] 
$ make -C ./build-hello-cmake 
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

make指令中-C指明了生成可执行文件所在的路径。
以上仅供参考。

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

cmake简单使用 的相关文章

  • 当从后台工作程序发生事件时,XlCall.Excel(XlCall.xlcCalculateNow) 抛出 XlCallException

    我有一个 ExcelFunction 来排队一些计算 ExcelFunction public static void QueueCalcs takes ranges var calcRequests builds list of calc
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • GetThreadContext failed报错解决方法

    最近编译后的项目总是不稳定 运行一会就崩溃 然后报错GetThreadContext failed 网上报这个错误的还挺多的 不过大部分都是玩家遇到的 GetThreadContext failed的原因很多 但我这次绝对是被steamVR
  • 斯皮尔曼(Spearman)\ 皮尔逊(Pearson)相关系数计算

    斯皮尔曼 Spearman 相关 斯皮尔曼 Spearman 相关是衡量两个变量的依赖性的 非参数 指标 它利用单调方程评价两个统计变量的相关性 如果数据中没有重复值 并且当两个变量完全单调相关时 斯皮尔曼相关系数则为 1或 1 scipy
  • Android Studio中SVN重新关联项目,使其文件变色

    一般我们的项目中文件夹中通过svn关联 通过Android Studio打开按道理的话 可算是关联了 这里先普及下 SVN的文件的颜色所代表的意思 如下 绿色 已加入VCS 但未提交 红色 未加入VCS 白色 已提交 蓝色 有修改 问题 在
  • brpc源码解析(十七)—— bthread上的类futex同步组件butex详解

    文章目录 一 futex简介 二 butex源码解析 2 1 butex相关数据结构 2 2 butex主要机制 2 2 1 butex wait 2 2 2 butex wake 我们知道在linux 下 锁和其他一些同步机制都会用到fu
  • 实验三 数组与指针实验

    实验目的 1 学习使用数组数据对象 2 掌握指针的使用方法 3 学习通过动态内存分配实现动态数组的定义和使用 并体会指针在其中的作用 4 掌握静态成员的使用方法 5 练习通过Debug观察指针的内容及其所指对象的内容 实验内容 1 运行下列
  • 使用 mapstruct 和 querydsl 时 compile 问题备忘

    参考 https stackoverflow com questions 74825653 querydsl 5 with mapstruct issues while generating resources 问题 在使用 springb
  • C++中的typeid

    2023年8月10日 周四下午 目录 概述 typeid的用法 用法1 用法2 用法3 举例说明 概述 typeid是 C 中的运算符 用于获取表达式或类型的运行时类型信息 它返回一个std type info对象 该对象包含有关类型的信息
  • JQuery全部过滤选择器详细介绍下

    文章目录 JQuery全部过滤选择器详细介绍 下 属性过滤选择器 属性过滤选择器 应用实例 代码演示 子元素过滤选择器 子元素过滤选择器基本介绍 5 nth child 选择器详解如下 子元素过滤选择器示例 应用实例 代码演示 表单属性过滤
  • SpringBoot整合Swagger

    一 Swagger 认识Swagger Swagger 是一个规范和完整的框架 用于生成 描述 调用和可视化 RESTful 风格的 Web 服务 总体目标是使客户端和文件系统作为服务器以同样的速度来更新 文件的方法 参数和模型紧密集成到服
  • 开关电源Buck电路CCM及DCM工作模式

    一 Buck开关型调整器 二 CCM及DCM定义 1 CCM ContinuousConduction Mode 连续导通模式 在一个开关周期内 电感电流从不会到0 或者说电感从不 复位 意味着在开关周期内电感磁通从不回到0 功率管闭合时
  • (详解与使用)Sharding-JDBC通过mysql主从复制来进行项目优化

    目录 背景 一 环境准备 1 mysql的主从复制环境 2 导入maven坐标 3 在配置文件 application yml 中配置读写分离规则 4 在配置文件中配置允许bean定义覆盖配置项 5 配置完毕可以测试 背景 面对日益增加的系
  • 安可与普通测评的区别_订房网站比较,Agoda、Booking、Hotels、Expedia和携程的区别,哪个更好更便宜...

    经常在网上看到不少网友在订房过程中会提出这样的问题 Agoda和Booking有什么区别 Agoda和携程哪个好 Hotels订房靠谱吗 订酒店哪个网站最便宜 Agoda Booking还是Expedia 等等 今天我们就来介绍一下 五大主
  • GitLab 简易指引(一):离线一键安装

    本文为 原创 文章 转载请标明出处 原文链接 https weyunx com 2019 01 22 原文出自 微云的技术博客 前言 近期为满足持续集成的需要 需要在内网搭建GitLab GitLab 简介 GitLab 是利用 Ruby
  • 把频谱图的纵坐标设置为分贝刻度

    在信号的频谱分析中 有时频谱的幅值有很大的动态范围 必须要把幅值取对数转换成为分贝值 有两种解决方法 一种是Y轴用对数坐标 另一种是对幅值取对数 转换成分贝值后再画图 1 Y轴用对数坐标 作图时 Y轴用对数坐标 在MATLAB中 X轴 Y轴
  • spring boot 集成logstash 日志

    1 logstash 插件配置 logstash下config文件夹下添加 test conf 文件内容 input tcp mode gt server host gt 0 0 0 0 port gt 4567 codec gt json
  • 已解决 AttributeError: module ‘tensorflow‘ has no attribute ‘random‘

    今天运行py文件的时候发现出了这个错 用了很多方法都没能解决 删了重装已经试了无数次了也不行 于是我把tensorflow的版本给升级了一下 解决问题了 之前是1 10的我升到了1 12 pip install tensorflow gpu
  • linux:vim NERDTree 安装和使用

    1 安装NERDTree之前按照网上的按照一直都安装不上 现在安装上了笔记一下 现在NERDTree 提供两种下载方法 http www vim org scripts script php script id 1658 https git
  • Linux系统通过Console线连接交换机

    Linux系统通过Console口连接交换机 安装minicom Ubuntu安装 sudo apt get install minicom Centos 安装 sudo yum install minicom 配置minicom 需要ro
  • 页面增加水印,附带vue3写法

    效果图 App vue文件
  • cmake简单使用

    概述 cmake是一种跨平台编译工具 除了可以编译c c 代码也可以编译其他语言的代码 其主要就是通过cmake执行CMakeLists txt从而生成Makefile 下面就自己了解到的简单的一点知识 做以记录 更多可查看官网 https