[C/C++] -- CMake使用

CMake(Cross-platform Make)是一个开源的跨平台构建工具,用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程,使得开发人员能够更方便地管理代码、依赖项和构建设置。

CMake 使用一个名为 CMakeLists.txt 的配置文件来描述项目的构建过程。在 CMakeLists.txt 文件中,可以指定项目的源代码文件、依赖项以及构建选项等信息。然后,CMake 会根据这些信息生成对应平台的构建脚本(如 Makefile 或 Visual Studio 项目文件),从而完成项目的构建过程。

1.下载安装

  1. Windows

    • 在 CMake 官方网站 上下载 Windows 版本的安装程序。
    • 运行安装程序,按照提示进行安装。
  2. macOS

    • 可以使用 Homebrew 进行安装,命令为 brew install cmake
  3. Linux

    • 在大多数 Linux 发行版的软件仓库中都可以找到 CMake,可以使用系统自带的软件包管理器进行安装,比如:
      • Ubuntu/Debian:sudo apt install cmake
      • Fedora:sudo dnf install cmake
      • CentOS:sudo yum install cmake

2.CMake使用介绍

1. 创建项目目录结构

假设你有以下项目目录结构:

project/|- src/|- main.cpp|- helper.cpp|- include/|- helper.h|- CMakeLists.txt

2. 编辑 CMakeLists.txt 文件

在项目根目录下创建一个 CMakeLists.txt 文件,并添加以下内容:

cmake_minimum_required(VERSION 3.10)project(MyProject)# 添加可执行文件
add_executable(my_executable src/main.cpp src/helper.cpp)# 添加头文件路径
target_include_directories(my_executable PUBLIC include)

3. 生成构建系统

在项目根目录下创建一个 build 目录,进入该目录,并运行以下命令生成构建系统:

cmake ..

4. 构建项目

根据生成的构建系统进行构建操作,比如使用 make 命令(如果是在 Linux/macOS):

make

5. 运行程序

构建成功后,在 build 目录下会生成可执行文件,你可以运行它:

./my_executable

其他常见用法

  • 指定编译选项:
target_compile_options(my_executable PRIVATE -Wall -Wextra)
  • 添加库文件依赖:
find_package(SomeLibrary REQUIRED)
target_link_libraries(my_executable PRIVATE SomeLibrary::SomeLibrary)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774687.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微服务入门篇:Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

目录 1.Nacos安装1.官网下载2.解压到本地3.启动nacos 2.Nacos快速入门1.在父工程中导入nacos依赖2.给子项目添加客户端依赖3.修改对应服务的配置文件4.启动服务,查看nacos发现情况 3.Nacos服务多级存储模型4.NacosRule负载均衡5. 服务实例的权重设置6.环境隔离&…

双重OSPF + OSPF综合实验

一、实验要求 1.R4为ISP,所连接的所有物理接口为公有网段,任意指定IP即可。 2.R1-2-3 构建一个星型结构的MGRE结构,其中R1为中心点,假设R1的公有IP为固定地址。 3.R1-5-6 构建另一个全连网状的MGRE网络,其中R1/5均为中…

网络套件字(理论知识)

一、源IP地址和目的IP地址 上次说到IP地址是为了是为了让信息正确的从原主机传送到目的主机,而原IP地址和目的IP地址就是用于标识两个主机的,既然叫做地址必然有着路径规划的作用,而路径规划最重要的就是,从哪来到哪去&#xff0…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层?1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识:概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题(复杂) 大问题划分为小问题 怎么分层&#…

新手小白做steam搬砖项目,这些内幕要了解

转眼2024年已经过去了五分之一,很多粉丝都在问steam搬砖项目真的假的,害怕项目的风险,担心steam搬砖项目到底能不能做,所以一直在犹豫和徘徊。我发现很多人想赚钱,但苦于找不到好的副业,高门槛的项目又做不…

C语言的循环结构

目录 前言 1.三种循环语句 1.while循环 2.for循环 2.1缺少表达式的情况 3.do while循环 2.break语句和continue语句 2.1在while循环中 2.2在for循环中 2.3在do while 循环中 3.循环的嵌套 4.go to语句 前言 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是…

【机器学习】数据清洗之识别缺失点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

Verilog刷题笔记23

题目: Suppose you’re building a circuit to process scancodes from a PS/2 keyboard for a game. Given the last two bytes of scancodes received, you need to indicate whether one of the arrow keys on the keyboard have been pressed. This involves a fairly simp…

【LeetCode】51. N 皇后(困难)——代码随想录算法训练营Day30

题目链接:51. N 皇后 题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回…

day34 本地存储(重要)

目录 本地存储简介本地存储分类—— localStorage本地存储分类—— sessionStorage(了解)存储复杂数据类型问题1:本地只能存储字符串,无法存储复杂数据类型。问题2:因为本地存储里面取出来的是字符串,不是对象&#xf…

react将选中文本自动滑动到容器可视区域内

// 自动滚动到可视区域内useEffect(() > {const target ref;const wrapper wrapperRef?.current;if (target && wrapperRef) {const rect target.getBoundingClientRect();const wrapperRect wrapper.getBoundingClientRect();const isVisible rect.bottom &l…

消息队列MQ 介绍

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,双非大四,Java实习中…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正&a…

掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧

目录 虚拟机介绍 虚拟机的关键字 服务器架构的发展 为什么用虚拟机VMware 虚拟机和阿里云的区别 功能角度 价格因素 应用场景 优势方面 找到windows的服务管理 配置VMware 关于VMware安装的几个服务 vmware如何修改各种网络配置 关于NAT的详细信息(了解) NAT(网…

我的docker随笔43:问答平台answer部署

本文介绍开源问答社区平台Answer的容器化部署。 起因 笔者一直想搭建一个类似stack overflower这样的平台,自使用了Typora,就正式全面用MarkdownTyporagit来积累自己的个人知识库,但没有做到web化,现在也还在探索更好的方法。 无…

常见的ANSI转义码

ANSI 转义码是一组控制码,用于在文本中添加格式化和颜色。这些码以 ESC(Escape)字符为开头,通常是 \x1b,后面紧跟着一系列参数和指令。在 ANSI 标准中,这些码通常用于控制终端的文本输出。 下面是一些常见…

springboo冬奥会科普平台源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生,各行各业相继进入信息管理时代&#xf…

cocos creator 3.x 预制体无法显示

双击预制体,进入详情页,没有显示资源 Bomb 是个预制体,但是当我双击进来什么都没有了,无法对预制体进行可视化编辑 目前我只试出来一个解决方法: 把预制体拖进Canvas文件中,这样就能展示到屏幕上&#xff…

为什么要设置止损

2024年1月至2月7日,A股最令人瞩目的事件就是代表小微盘的中证500和中证1000雪球连续敲入,以及万得微盘指数的崩塌(1个月下跌50%)。 这次的这个过程中,止损很重要。一般情况下,如果设置了20%回撤止损的话&am…

挑战杯 python opencv 深度学习 指纹识别算法实现

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:4分创新点:4分 该项目较为新颖…

多线程JUC:解决线程安全问题——synchronized同步代码块、Lock锁

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:多线程&JUC:线程的生命周期与安全问题 📚订阅专栏:多线程&JUC 希望文章对你们有所帮…