CMake:相关概念与使用入门(一)

news2024/11/19 20:34:19
1、Cmake概述
  • Cmake是一个项目构建工具,并且是跨平台的。

  • 关于项目构建我们所熟知的有Makefile,然后通过make命令进行项目的构建,并且大多数是IDE都继承了make,比如:VS的nmake,Linux下的GNU make、Qt的qmake等。

  • 如果自己手动写makefile,会发现makefile通常依赖当前的编译平台,并且makefile的工作量比较大,解决依赖关系也容易出错。

  • 而Cmake恰好能解决上述问题,其允许开发者指定整个过程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需要make编译即可,Cmake是一款用来生成Makefile的构建工具

  • Cmake给我的理解更像是Java语言用于管理项目的Maven和Gradle,但是没有Maven它们有那么强大的功能
    在这里插入图片描述

2、Cmake简单使用
# 这是一个CMakeLists.txt文件

#[[ 这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
]]

# 指定当前项目所需的最低cmake版本
cmake_minimum_required(VERSION 3.10.2)

# 定义工程名字
#project(test_project
#        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
#        [DESCRIPTION <project-description-string>]
#        [HOMEPAGE_URL <url-string>]
#        [LANGUAGES <language-name>...])
project(test_project)

# 添加生成可执行文件的名称和所需要的依赖(依赖以 或者;分隔开)
#add_executable(main main.cpp)
#add_executable(main main.cpp;sub.cpp;add.cpp;mul.cpp;dived.cpp)
add_executable(main main.cpp sub.cpp add.cpp mul.cpp dived.cpp)
  • Cmake支持大写、小写、混合大小写的命令,如果在编写CMakeLists.txt文件时使用的工具对应的命令提示,那么大小写随缘即可。

  • 注释行:#后面进行写注释

  • 注释块:#后面不能有空格必须紧跟着[[

  • cmake_minimum_required:指定使用的cmake最低版本

  • project:定义工程名称,并可以指定工程的版本、工程描述、web主页地址、支持的语言(默认情况下支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。

  • add_executable:定义工厂会生成一个可执行程序

3、Cmake简单使用
# tree命令
.
├── add.cpp
├── build
├── CMakeLists.txt
├── dived.cpp
├── head.h
├── main.cpp
├── mul.cpp
└── sub.cpp
  • head.h头文件中定义了add、sub、mul、dived四则运算

  • 分别在对应的.cpp文件中进行实现,然后main.cpp是程序的入口

  • CMakeLists.txt就是我们需要编写的文件,编写完毕之后进入build目录进行构建

  • 由于cmake命令会生成大量的一些编译产生的文件,为了防止污染工程通常都会在build文件夹下进行构建

  • 执行流程

    # 进入build文件夹
    cd build
    
    # cmake需要指定CMakeLists.txt文件所在的目录,生成Makefile
    cmake ../	
    
    # 执行make进行编译,生成可执行程序
    make
    
    # 执行可执行程序
    ./main
    
    /* 输出
    a + b = 12
    a - b = 8
    a * b = 20
    a / b = 5
    */
    

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

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

相关文章

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

基础SQL 函数

在MySQL中内置了很多函数&#xff0c;我们可以通过一段程序或者代码直接调用这个函数 一、字符串函数 下面通过例子来验证这些函数 -- 字符串函数-- concat函数 select concat("hello ","world");-- lower函数 select lower("HELLO");-- upper函…

4.18.2 EfficientViT:具有级联组注意力的内存高效Vision Transformer

现有Transformer模型的速度通常受到内存低效操作的限制&#xff0c;尤其是MHSA&#xff08;多头自注意力&#xff09;中的张量整形和逐元素函数。 设计了一种具有三明治布局的新构建块&#xff0c;即在高效FFN&#xff08;前馈&#xff09;层之间使用单个内存绑定的MHSA&#x…

4.24总结

对部分代码进行了修改&#xff0c;将一些代码封装成方法&#xff0c;实现了头像功能&#xff0c;通过FileInputStream将本地的图片写入&#xff0c;再通过FileOutputStream拷贝到服务端的文件夹中&#xff0c;并将服务端的文件路径存入数据库中

OpenHarmony语言基础类库【@ohos.util.Deque (线性容器Deque)】

Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&#xff0c;支持两端的元素插入和移除。Deque会根据实际需要动态调整容量&#xff0c;每次进行两倍扩容。 Deque和[Queue]()相比&#xff0c;Queue的特…

Linux中DHCP原理与配置

目录 一.DHCP的原理 1.DHCP的简要概述 2.DHCP的优点 3.DHCP的分配方式 4.DHCP的租约过程 5.DHCP服务 6.可分配的地址信息主要包括 二.DHCP同一网段分配地址实验 windows命令 一.DHCP的原理 1.DHCP的简要概述 DHCP&#xff08;Dynamic Host Configuration Protocol&a…

一文速览Llama 3及其微调:如何通过paper-review数据集微调Llama3 8B

前言 4.19日凌晨正准备睡觉时&#xff0c;突然审稿项目组的文弱同学说&#xff1a;Meta发布Llama 3系列大语言模型了 一查&#xff0c;还真是 本文以大模型开发者的视角&#xff0c;基于Meta官方博客的介绍&#xff1a;Introducing Meta Llama 3: The most capable openly a…

优化大模型的解释性提示以提升文本推理性能:一种无监督数据驱动的方法

介绍一篇大模型前沿论文&#xff0c;《Explanation Selection Using Unlabeled Data for Chain-of-Thought Prompting》。在这篇论文中&#xff0c;作者Xi Ye和Greg Durrett探讨了如何通过优化大语言模型&#xff08;LLMs&#xff09;的解释性提示来提升文本推理任务的性能。他…

星汉未来AI应用市场:一站式AI解决方案平台

星汉未来AI应用市场&#xff1a;一站式AI解决方案平台 在人工智能技术日益渗透到各行各业的今天&#xff0c;星汉未来AI应用市场为我们提供了一个集创新与实用于一体的平台。下面&#xff0c;我将为您详细介绍这个平台的各个方面。 平台特色 星汉未来AI应用市场是一个面向未…

微博聚类分析和可视化

首先对聚类分析作系统介绍。其次对聚类算法进行文献回顾&#xff0c;对其概况、基本思想、算法进行详细介绍&#xff0c;再是通过对微博数据分析具体来强化了解聚类算法&#xff0c;本文的数据是由所设计地软件在微博平台上获取的数据&#xff0c;最后得到相关结论和启示。 聚…

春季过敏症状高发如何防护?约克VRF中央空调为您支招

百花齐放的春季,对于易过敏人群来说却像是“噩梦”的开场。据了解,许多人都会出现打喷嚏、流鼻涕、皮肤瘙痒等春季过敏症状,皮肤上出现红疹甚至“痒不欲生”,并且断断续续不停复发,身上被挠得“体无完肤”,严重影响睡眠。 到底是哪些致敏因素导致春季过敏高发?易过敏人群又该…

基于51单片机空气质量监测报警仿真LCD1602液晶显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机空气质量监测报警仿真LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计&#xff1a;4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 基于51单片机空气质量监测报警仿真LCD显示( proteus仿真程序设计报告原理图讲解视频…

CTF之变量1

拿到题目发现是一个php代码&#xff0c;意思是用get方式获取args参数。 至于下面那个正则表达式怎么绕过暂且不知&#xff0c;但是题目最上面告诉我们lag In the variable ! &#xff08;意思是flag就在变量中&#xff09;。 那我们就传入全局变量globals&#xff08;&#xf…

maixcam如何无脑运行运行别人的模型(以安全帽模型为例)

maixcam如何无脑运行运行别人的模型&#xff08;以安全帽模型为例&#xff09; 本文章主要讲如何部署上传的模型文件&#xff0c;以及如果你要把你模型按照该流程应该怎么修改&#xff0c;你可以通过该文章得到你想要的应该&#xff0c;该应用也包含的退出按钮&#xff0c;是屏…

分布式与一致性协议之CAP(三)

CAP ACID理论:CAP的"酸"&#xff0c;追求一致性。 提到ACID,它很容易理解&#xff0c;在单机上实现也不难&#xff0c;比如可以通过锁、时间序列等机制保障操作的顺序执行&#xff0c;让系统实现ACID特性。但是一说要实现分布式系统的ACID特性比较难实现呢&#xf…

Prompt之美:如何设计提示词让大模型变“聪明”

目录 一. Prompt关键要素 二. Prompt技巧 三. 实战中的Prompt优化 四. 参考文献 一. Prompt关键要素 Prompt是一个简短的文本输入&#xff0c;用于引导AI模型生成特定的回答或执行特定任务。换句话说&#xff0c;Prompt是你与AI模型沟通的方式。一个好的Prompt可以让AI更准…

SpringBoot (批量)生成二维码工具类多种方法示例

一、引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version> </dependency><dependency><groupId>com.google.zxing</groupId><artifactId…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果&#xff1a; 代码&#xff1a; /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏 第一步 确认有添加静态库第二步 验证第三步 修改源码在合适的地方配置 ro.product.is_support_SettingsSplitEnabled 即可。第一步 确认有添加静态库 --- a/packages/apps/Settings/Android.bp +++ b/packages/apps/Set…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式&#xff08;此小节为搬运内容&#xff09; 原链接&#xff1a;Design_Compiler User Guide 随手笔记&#xff08;9&#xff09;Using Floorplan Information - 知乎 DC拥有四种工作模式&#xff1a; 工…