CMake 快速开始

CMake 安装

编辑环境:VS Code

编译环境:VS Code Remote SSH模式 + Ubuntu 24.04

CMake 官⽅源代码下载地址:https://cmake.org/download/

CMake 官⽅英⽂ 档地址:https://cmake.org/cmake/help/latest/index.html

Step 1:使⽤ubuntu⾃带apt 安装:

sudo apt install cmake

Step 2:验证安装:

安装完成后,可通过以下命令验证 CMake 是否安装成功以及查看其版本。

cmake --version
cmake version 3.28.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).

在这里插入图片描述

VS Code CMake 插件安装

VS Code CMake 插件 官⽅⽂档:https://code.visualstudio.com/docs/cpp/cmake-linux

VS Code CMake 插件有以下2点好处:

• 语法⾼亮和代码补全:对 CMakeLists.txt ⽂件提供语法⾼亮显⽰,使代码结构更加清晰易读。同时,⽀持代码补全功能,当你输⼊ CMake 命令或变量时,插件会⾃动提⽰可能的选项,减少⼿动输⼊的错误和时间。

• 智能分析和错误检查:能够对 CMakeLists.txt ⽂件进⾏智能分析,检查其中的语法错误和潜在问题,并在编辑器中实时显⽰错误提⽰和警告信息,帮助你及时发现和解决问题。

安装步骤如下:

Step 0:打开 VS Code,点击左侧活动栏中的 扩展图标(或按 Ctrl+Shift+X ).

在这里插入图片描述

Step 1:在搜索框中输⼊ CMake ,我们选择安装以下4个插件:

• CMake

• CMake Tools

• CMake Language Support

• CMake IntelliSence

在这里插入图片描述

Step 2:挨个点击Install 按钮,安装完成并且成功之后如下图

在这里插入图片描述

快速样例 - hello world ⼯程

我们创建⼀个新的 hello_world ⼯程。

下图展⽰了使⽤CMake 来管理hello world 程序⽣成的过程

在这里插入图片描述

Step 0:⽬录结构

├── CMakeLists.txt
└── main.cpp

Step 1:新建⽂件-main.cpp

#include <iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}

Step 2:新建⽂件-CMakeLists.txt

# 1 设置能运⾏此⼯程的cmake的最低版本
cmake_minimum_required(VERSION 3.18)
# 2 设置项⽬名称
project(helloWorld)
# 3 添加构建⽬标
add_executable(main main.cpp)

为什么需要设置最低的cmake版本?

CMake 是⼀个不断迭代的⼯具(⽬前最新4.x,历史有3.x),不同版本可能会引⼊新的语法、命令、模块或⾏为变更。如果项⽬中使⽤了⾼版本 CMake 才⽀持的特性(例如特定的函数、⽣成器表达式、⽬标属性等),⽽⽤⼾本地安装的cmake版本低于项⽬要求的版本,就会出现⽆法解释或者产⽣不可预知的⾏为。为了防⽌以上情况出现:

CMake 给我们提供了 cmake_minimum_required ,这个命令会在配置阶段( cmake 命令执⾏时)检查当前 CMake 版本:

• 若当前版本低于最低要求,CMake 会直接终⽌并报错,明确提⽰ “需要⾄少 X.X 版本”,避免后续因版本不兼容导致的模糊错误。

• 若当前安装的版本满⾜要求,则继续执⾏后续配置流程。CMake ⾥的 “⽬标” 是什么?在 CMake 中,“⽬标(Target)” 代表了⼀个需要被⽣成的实体,如可执⾏⽂件、静态库/动态库等,和Makefile⾥的⽬标是⼀个意思,他是现在CMake⾥最核⼼的3个概念之⼀。

Step 3:运⾏cmake

# 运⾏ CMake 命令 就在这⼀步 ⽣成Makefile
cmake ..

Step 4:编译&&链接

make

Step 5:运⾏程序

root@hcss-ecs-a74f:~/lesson9/cmake/hello_world# ./main
hello world

tep 4:编译&&链接

make

Step 5:运⾏程序

root@hcss-ecs-a74f:~/lesson9/cmake/hello_world# ./main
hello world

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94110.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94110.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94110.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F1 EXTI介绍及应用

第三章 EXTI介绍及应用 1. EXTI介绍 EXTI&#xff08;External interrupt/event controller&#xff09;—外部中断/事件控制器&#xff0c;管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器&#xff0c;可以实现输入信号的上升沿检测和下降沿的检测。…

Oracle SYS用户无法登录数据库-ORA-12162

错误详情 [Oracleorcl bin]$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 18 08:12:04 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specifiedOS登录解析 注意&…

【计算机视觉与深度学习实战】06基于光流算法的实时运动检测系统设计与实现——以蚊子轨迹追踪为例(有完整代码)

第一章 引言 计算机视觉作为人工智能领域的重要分支,近年来在目标检测、运动分析、行为识别等方面取得了显著进展。其中,运动检测技术作为视频分析的基础技术之一,在安防监控、交通管理、体感交互、生物行为研究等领域发挥着越来越重要的作用。光流算法作为运动检测的经典方…

国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例

摘要本文综述了国科安芯推出的国产CANFD芯片ASM1042系列的技术特性与应用前景。ASM1042系列作为一款高性能的CANFD收发器&#xff0c;支持5Mbps的高速通信和高达70V的总线耐压&#xff0c;广泛应用于汽车电子、工业控制和航空航天等领域。文中详细分析了其高速率设计、高耐压设…

偶现型Bug处理方法---用系统方法对抗随机性

在软件开发中&#xff0c;Bug是影响产品质量的核心问题&#xff0c;而偶现型Bug&#xff08;Intermittent Bug&#xff09;因其“时隐时现、难以复现”的特性&#xff0c;成为最头疼的挑战之一。这类Bug不像必现Bug那样有稳定的触发路径&#xff0c;可能在特定环境、特定操作序…

一分钟docker部署onlyoffice 在线预览word pdf excel...

目录 效果 1.执行命令 2.访问 3.测试 3.1执行下面的命令 3.2测试效果 3.3预览效果 3.4转换 效果 1.执行命令 sudo docker run -i -t -d -p 80:80 onlyoffice/documentserver 稍等片刻 2.访问 浏览器打开ip:80即可访问 3.测试 3.1执行下面的命令 sudo docker exec 7…

ES_数据存储知识

一、 _source 字段&#xff1a;数据的“真相之源” 1. 是什么&#xff1f; _source 是一个独立的、特殊的元字段。它存储了你在索引文档时提交的原始JSONbody的完整内容。 2. 工作原理与用途 写入&#xff1a;当你索引一个文档 {"title": "My Book", "…

day37-Nginx优化

1.每日复盘与今日内容1.1复盘nginx四层转发rewrite tag&#xff1a;last和breakredirect、permanent&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;Nginx内置参数动静分离&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;1.2今日内容N…

Zynq开发实践(fpga高频使用的两个场景)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】本身fpga是介于纯软件和asic之间的元器件。如果是纯软件&#xff0c;那我们要做的&#xff0c;就是纯上层开发。只要相关驱动已经实现&#xff0c;那…

20250822在Ubuntu24.04.2下指定以太网卡的IP地址

20250822在Ubuntu24.04.2下指定以太网卡的IP地址 2025/8/22 20:28缘起&#xff1a;公司的服务器的IP地址老变&#xff01;&#xff0c;路由器经常被其他其它部门断电重启。 导致IP地址被DHCP服务器给更改了&#xff01; 直接固定IP地址了。 本来想通过VI命令编辑配置文件来指定…

【yocto】BitBake指令汇总解析

【点关注&#xff0c;不迷路 】BitBake 是一个功能强大且核心的元任务执行器&#xff0c;它是 OpenEmbedded 和 Yocto Project 的构建基石。简单来说&#xff0c;它就像一个高度专业化的 make 工具&#xff0c;但它能解析复杂的元数据&#xff08;配方、配置、类&#xff09;&…

CSS @media 媒体查询

media 媒体查询是响应式设计的核心工具&#xff0c;允许根据设备特性&#xff08;如屏幕宽度、高度、方向等&#xff09;应用不同的 CSS 样式。一、基本语法media media-type and (media-feature) {/* 目标样式规则 */ }媒体类型&#xff08;可选&#xff09;&#xff1a;all&a…

Vue2.x核心技术与实战(三)

目录 四、Vue2.x:组件通信&进阶用法 4.1 组件的三大组成部分(结构/样式/逻辑) 4.1.0 组件的三大组成部分-注意点说明 4.1.1 组件的样式冲突 scoped 4.1.2 data是一个函数 4.2 组件通信 4.2.1 什么是组件通信 4.2.2 不同的组件关系和组件通信方案分类 4.2.2 父传子…

泵站远程监控与自动化控制系统:智慧泵房设备的创新实践

在智慧水务快速发展的背景下&#xff0c;泵站自动化控制系统与水泵远程监控技术已成为提升供水效率、保障水质安全、降低运维成本的核心手段。通过物联网、云计算、边缘计算等技术的深度融合&#xff0c;智慧泵房设备实现了从“人工值守”到“无人化智能管理”的跨越式升级&…

校园作品互评管理移动端的设计与实现

摘 要 本文概述了一款运用 Spring Boot 框架精心打造的校园作品互评管理移动端的设 计与实现&#xff0c;其设计初衷在于激发校园内的创作活力&#xff0c;并优化学生间的互评流程&#xff0c;进一 步推动教育模式的创新。该系统深度融合了移动互联网技术&#xff0c;借助小程序…

为什么需要关注Flink并行度?

当你的Flink作业运行时&#xff0c;是否遇到过资源利用率不足或任务堆积的情况&#xff1f;这很可能与并行度设置不当有关。作为流处理领域的"性能放大器"&#xff0c;合理配置并行度能带来&#xff1a;提升吞吐量资源成本降低的黄金比例背压问题的天然解决方案一、四…

电脑芯片大的32位与64位指的是什么

32 位与 64 位既不单纯指数据线根数&#xff0c;也不单纯指地址线根数&#xff0c;而是对CPU 核心架构位数的统称&#xff0c;其核心关联以下两个关键硬件指标&#xff0c;需结合场景区分&#xff1a;核心关联&#xff1a;CPU 通用寄存器位数这是 “32 位 / 64 位” 的核心定义…

第1.1节:图灵测试与AI的诞生

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

分布式搜索(Elasticsearch)基本用法

目录 初识Elasticsearch 什么是elasticsearch 正向索引和倒排索引 与mysql进行对比 安装elasticsearch、kibana 安装分词器IK IK分词器的拓展和停用词典 ik分词器-拓展词库 ik分词器-停用词库 索引库操作 mapping映射属性 索引库的CRUD 查看、删除索引库 文档操作 …

docker 查看容器 docker 筛选容器

目录 docker ps 看运行中的容器 运行中的容器筛选容器名 2️⃣ 包括已停止的容器中筛选 3️⃣ 只输出容器 ID&#xff08;脚本里常用&#xff09; docker ps 看运行中的容器 docker ps -a 看所有容器 --filter "namexxx" 可以按名字查 运行中的容器筛选容器名 …