【C++】8.编译:CMake工具入门

news2025/1/23 13:13:26
                          😏*★,°*:.☆( ̄▽ ̄)/$:*.°★* 😏
                          这篇文章主要介绍CMake工具的入门使用。

————————————————学其所用,用其所学。——梁启超—————————————————

                        欢迎来到我的博客,一起学习知识,共同进步。

                       🥞喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. CMake工具介绍
    • :blush:2. CMake安装与使用
    • Windows安装CMake:
    • Linux安装CMake:
    • :satisfied:3. CMake语法说明
      • 1. 构建类型
      • 2. 注释、输出、大小写等
      • 3. 布尔值
      • 4. 常用命令
      • 5. CMakeLists.txt示例

😏1. CMake工具介绍

CMake是一个跨平台的自动化构建(编译)工具,用于管理、生成和测试软件项目。它使用类似Make的语法来描述构建过程,并提供了一种简单的方式来跨多个操作系统(Win、Linux)和编译器(MinGW、gcc)生成可执行文件、库和安装包。CMake支持各种编程语言,包括C、C++、Java等,可以在Linux、Windows、Mac OS X等多种平台上使用。

CMake通过CMakeLists.txt文件来描述项目的构建过程,其中包含项目名称、源文件列表、目标类型、依赖项等信息。CMake可以生成MakefileVisual Studio项目文件等,使开发人员可以在不同的平台和编译器上使用相同的配置文件进行构建。

除了构建之外,CMake还提供了测试框架(搭配gtest)、打包功能(搭配nsis)、安装规则等功能,帮助开发人员更方便地管理和部署他们的软件项目。

😊2. CMake安装与使用

官网:https://cmake.org/

Windows安装CMake:

下载链接:https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-windows-x86_64.msi

Linux安装CMake:

# 更新软件列表
sudo apt-get update
# 安装
sudo apt-get install cmake
# 验证版本
cmake --version

对于一个配置好的CMake项目来说,从命令行生成工程文件是很简单的,一般步骤如下:

# 创建build目录
mkdir build && cd build
# 生成Makefile
cmake ..  # (Windows-MinGW)cmake -G "MinGW Makefiles" ..
# 编译
make
# 生成可执行文件

😆3. CMake语法说明

1. 构建类型

可以指定的构建类型有:Debug、Release、MinSizeRel、RelWithDebInfo。使用示例:

cmake -DCMAKE_BUILD_TYPE=Debug

2. 注释、输出、大小写等

注释用#,大小写不分,用message来输出信息,用set()来定义变量,用math()来进行数学计算。

3. 布尔值

表示False的有:OFF、FALSE、N、NO、0、”“(空字串)、没被指派值的变量、NOTFOUND、任何结尾是 -NOTFOUND 的字串

表示TRUE的有:ON、TRUE、Y、YE、YES、1、其他不归类为 FALSE 的字串

4. 常用命令

指定项目名称:project(Main)

指定需要的CMake的最低版本:cmake_minimum_required(VERSION 2.8)

用于将 dir 目录下的所有源文件的名字保存在变量 variable 中:aux_source_directory(. DIR_SRCS)

用于指定从一组源文件 source1 source2 … sourceN 编译出一个可执行文件且命名为 name:add_executable(Main ${DIR_SRCS})

用于指定从一组源文件 source1 source2 … sourceN 编译出一个库文件且命名为name:add_library(Lib ${DIR_SRCS})

用于指定某个目标(可执行文件或者库文件)依赖于其他的目标。这里的目标必须add_executable、 add_library、 add_custom_target 命令创建的目标:add_dependencies(target-name depend-target1 depend-target2 …)

用于添加一个需要进行构建的子目录:add_subdirectory(Lib)

用于指定 target 需要链接 item1 item2 …。这里 target 必须已经被创建, 链接的item 可以是已经存在的 target(依赖关系会自动添加):target_link_libraries(Main Lib)

用于设定变量 variable 的值为 value。如果指定了 CACHE 变量将被放入 Cache(缓存)中:set(ProjectName Main)

用于移除变量 variable。如果指定了 CACHE 变量将被从 Cache 中移除:unset(VAR CACHE)

载入预定义的 cmake 模块:INCLUDE(module [OPTIONAL])

用于设定目录, 这些设定的目录将被编译器用来查找 include 文件:include_directories(${PROJECT_SOURCE_DIR}/lib)

5. CMakeLists.txt示例

示例一:

project(HELLO)
set(SRC_LIST main.c hello.c)
add_executable(hello ${SRC_LIST})

示例二:

project(HELLO)
set(LIB_SRC hello.c)
set(APP_SRC main.c)
add_library(libhello ${LIB_SRC})
add_executable(hello ${APP_SRC})
target_link_libraries(hello libhello)

在这里插入图片描述

以上。

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

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

相关文章

Istio Ambient Mesh L4: 剖析ztunnel组件的工作原理

前言 早在2021年,Istio就开始了共享代理模式的探索,并于2022年9月推出的Ambient Mesh——无Sidecar的全新数据平面模式,目前还未发布正式版本。 这篇博客是花了好多时间收集整理出来的,按照学习思路,先简介了 Istio …

vue3项目搭建超详解

vue3安装与目录讲解 文章目录 vue3安装与目录讲解安装node.jsnpm绑定淘宝镜像安装vue脚手架创建vue项目目录解释推荐使用vscode 安装node.js http://nodejs.cn/download/ 根据自己电脑的位数自行下载。可安装到任意盘哈,因为我C盘比较大,我就直接在C盘了…

[IOT物联网]Python快速上手开发物联网上位机程序——前言

一、什么是Python Python是一种简单易学、高级、通用的编程语言。它是一种解释型语言,不需要编译即可运行,因此可以快速地进行开发和测试。Python具有简洁优美的语法,使用它可以提高生产力和代码可读性。Python拥有强大的标准库和第三方库&am…

windows10下设置本地apache\nginx站点部署ssl证书,使本地配置的域名可以用https访问

首先我们需要下载openssl来生成证书文件: 去官方网址下载https://slproweb.com/products/Win32OpenSSL.html; 下载好了,双击exe文件,然后就下一步,下一步安装完成; 安装之后配置环境变量,新建…

工赋开发者社区 | 何谓智能工厂?国内外智能工厂建设的现状分析

导读 本文将分析国内外智能工厂建设的现状与问题,智能工厂的内涵,以及推进智能工厂建设的成功之道。 1 国内外智能工厂建设的现状分析 近年来,全球各主要经济体都在大力推进制造业的复兴。在工业4.0、工业互联网、物联网、云计算等热潮下&am…

MDPI参考文献引用

在引参考文献的时候,MDPI论文有一个统一的格式要求,这里是帮助那些不会快速引文献的同学快速引用MDPI格式的参考文献。 【1】首先安装endnote,并创建仓库 【2】下载endnote识别的MDPI输出参考文献格式类型:https://endnote.com/style_downl…

【移动端网页布局】flex 弹性布局子项目属性 ② ( align-self 子项目属性 - 设置指定子项目元素侧轴排列方式 | 代码示例 )

文章目录 一、align-self 子项目属性 - 设置指定子项目元素侧轴排列方式二、代码示例 - 设置指定子项目的侧轴排列方式 一、align-self 子项目属性 - 设置指定子项目元素侧轴排列方式 align-self 子项目属性 用于 控制 子项目 在 侧轴 上的排列方式 ; align-self 子项目属性样…

C/C++访问MySQL数据库(非常详细的配置,一步一步的来,细心看我,不会你怪我)

第一步: 打开mysql的安装目录,默认安装目录如下:C:\Program Files\MySQL\MySQL Server 8.0,确认 lib 目录和 include 目录是否存在。 第二步: 打开VS2019,新建一个空工程,控制台应用程序即可,注…

web安全之CSRF漏洞——苦日7小时

CSRF_exercise CSRF(Cross-Site Request Forgery)攻击,也称为“跨站请求伪造”攻击,是一种利用用户已登录的身份在用户不知情的情况下,向服务器发送恶意请求的攻击方式。攻击者可以通过构造一些针对被攻击网站的特定请…

无锁化栈、队列深入解析及实现

首先声明,本文探讨实现的无锁化栈、队列皆是通过CAS硬件原语实现,且没有解决ABA问题。 之前比赛一直有看到无锁化编程优化部分,但一直没有实践过,(这里主要是使用的CAS,当然lock-free实现其实有好几种,这取决于具体的…

Django006:ModelForm组件

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

SpringBoot @Async异步线程 + CompletableFuture使用

参考资料 SpringBoot 最简单的使用异步线程案例 AsyncSpringboot Async异步扩展使用 结合 CompletableFuture 目录 一. 配置线程池二. 耗时任务1三. 耗时任务2四. 调用 一. 配置线程池 当池子大小小于corePoolSize,就新建线程,并处理请求当池子大小等于…

[golang gin框架] 31.Gin 商城项目- 提交订单逻辑操作以及去支付页面制作

一.界面展示 确认订单页面 确认订单页面相关逻辑见 golang gin框架] 30.Gin 商城项目- 购物车商品确认页面以及收货地址的增删改查 点击 去支付按钮逻辑: (1).判断用户是否存在地址,不存在则新增并设置为默认地址 (2).点击去支付,请求提交订单执行结算操作: 订单执行结算操作步…

C语言-【移位操作符详解】

这篇文章主要介绍了C语言中移位操作符,文章中通过详细的代码以及有关计算机中零碎的知识点对移位操作符进行了一个更好的解释,需要的小伙伴们可以一起学习学习吖~ 移位操作符:移动的是补码的二进制序列。 在C语言当中,有两种移位…

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五 引言🍉句1: The color green is natural for trees and grass.成分划分弱读语调 🍉句2: But it is an unnatural color for humans.成分划分弱读连读语调 🍉句3: A person who h…

React | React组件化开发(二)

✨ 个人主页:CoderHing 🖥️ React .js专栏:React .js React组件化开发(二) 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React …

【TOP生物信息】使用SingleR注释细胞类型

扫码关注下方公粽号,回复推文合集,获取400页单细胞学习资源! 本文共计1887字,阅读大约需要6分钟,目录如下: SingleR基本介绍 SingleR包安装 SingleR包使用 1.使用已有的参考数据集进行细胞定义2.使用自定…

NAS内网穿透

3)可用方法1:Tailscale(免费) Tailscale 是一种基于 WireGuard 的虚拟组网工具 下面教大家安装: 镜像仓库搜索:tailscale,就是第一个 下载之后安装配置注意: 1)要把权限全部打开…

C++游戏服务器框架笔记(四)_封装Select

C游戏服务器框架笔记(一)_封装数据包类 C游戏服务器框架笔记(二)_封装Socket类 C游戏服务器框架笔记(三)_封装ByteBuffer类 C游戏服务器框架笔记(四)_封装Select 因为设想的次系列服务器主要应用场景是linux系统下,支持Windows系统是为了更好的调试和开发&#x…

【sqlite】联查Join更新

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…