首页 > 其他分享 >工欲善其事必先利其器--CMake牛刀小试

工欲善其事必先利其器--CMake牛刀小试

时间:2023-05-23 14:00:46浏览次数:36  
标签:CMakeLists CMake 牛刀小试 -- 必先利其器 MakeFile cmake Tutorial

这里假设用户已经安装好MinGW编译套件!并配置好环境变量!具体怎么下载和配置网上教程非常多,这里贴上一个链接:不仅教你安装MinGW还教你安装VScode配置

1、学习c plus plus编码为什么要学习CMake?

在Windows下使用集成开发环境(IDE)开发项目时,一般会使用IDE自带的构建工具(如Visual Studio的MSBuild),而不是使用CMake,是不是使用Visual Studio很爽,一键构建,反正也不清楚那么多源文件先编译谁,后编译谁,反正一点击run就完事了!所以如果你想了解你生成的可执行程序(exe)是具体如何出现的,那么了解CMake可以帮助你更好地理解项目结构和构建过程。此外,如果你需要跨平台的项目,或需要在多个平台上构建同一个项目,使用CMake也是一个不错的选择。CMake中的C全称是Cross,表示跨平台!

2、CMake、MakeLists、MakeFile三者和用户之间的爱恨情仇

刚接触CMake时:啥玩意?我有Visual Studio,有QT,我用这玩意?搞这么复杂!abandon!

GitHub一搜代码,发现大佬很多都用CMake,迫不得已又开始接触CMake

项目要求c++代码跨平台,沃日,又得接触CMake!

CMake、MakeLists、MakeFile三者之间关系如下图所示。

(1)MakeLists是用户编写

(2)CMake不是用户编写,需要官网下载并配置环境变量:CMake 安装教程

(3)MakeFile不是用户编写,通过执行CMake命令自动生成

(4)Make不是用户编写,被包含在CMake里面了

综上所述,重点关注MakeLists如何编写,其他几个浅尝辄止!

CMake的牛刀小试图

3、Cmake小试牛刀

真学技术还是得官网!--> CMake tutorial

CMake tutorial手把手保姆式教学,12个用例随时学,用到哪个功能时再去学对应案例一点都不迟,不要陷入学习中!重点是了解CMake工作机制和流程!

4、练习Step1需要注意的点

严格按照步骤来,先准备好源文件

(1)编写CMakeLists.txt

下面是编写CMakeLists.txt的核心三部曲:

cmake_minimum_required(VERSION 3.25.1) // 1. 设定本工程需要的最低cmake版本!
project(Tutorial)                      // 2. 设定工程名字
add_executable(Tutorial tutorial.cxx)  // 3. 告诉cmake使用定义的源文件tutorial.cxx生成可执行文件Tutorial 

cmake_minimum_required(VERSION 3.25.1)命令这里存疑,cmake版本设置多少合适呢?不是很重要,暂不研究,只需要知道一旦设置了VERSION 3.25.1,那么camke版本必须大于等于3.25.1!

project(Tutorial)需要注意的是Tutorial是你的工程名字,作用是为了在后续的CMakeLists.txt文件中,我们可以使用该项目名称和支持的语言类型来进行其他设置。

注意project(Tutorial)中的Tutorial和add_executable(Tutorial tutorial.cxx)中的Tutorial 是一样的,但其实可以不一样,前者是工程名,后者是可运行文件名。根据用户命名习惯怎么设置都行!

(2)通过CMakeLists.txt生成MakeFile相关的一些列文件

为了防止生成的MakeFile文件跟源文件混合在一起导致混乱,新建Step1_build文件夹

在Step1_build文件夹中打开终端

执行如下指令

cmake -G "MinGW Makefiles" ../Step1

生成的中间文件如下

(3)通过MakeFile文件将源码翻译并链接生成可执行文件

通过如下命令

 mingw32-make

或者

cmake --build .

生成的可执行文件如下

至此,CMakeLists.txt-->MakeFile-->可执行文件告一段落!

标签:CMakeLists,CMake,牛刀小试,--,必先利其器,MakeFile,cmake,Tutorial
From: https://www.cnblogs.com/weihfz/p/17424822.html

相关文章

  • 8百多经典古诗学习鉴赏ACCESS\EXCEL数据库
    虽然古诗类的数据搞到过很多,但是有鉴赏、译文等鉴赏类字段的还是很少,而今天搞到一个古诗学习类数据库,虽然记录数不多,但大都有翻译、鉴赏、译文等字段内容,是小学生、中学生、高中生学习的好东西。朝代统计:金朝(2)、两汉(22)、明代(25)、南北朝(24)、清代(27)、宋代(348)、唐代(373)、魏晋(19)、五......
  • windows通过命令行设置进程优先级
    针对进程的就通过这6个优先级来控制图形界面可以通过任务管理器操作,也可以通过其他软件 cmd命令行示例:wmicprocesswherename="processname"CALLsetpriority"value"wmicprocesswherename="firefox.exe"CALLsetpriority"realtime"wmic......
  • vue项目加载会出现花括号{{}}的解决方法
    使用v-cloak指令这个指令保持在元素上直到关联实例结束编译。和CSS规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。<divv-cloak>{{message}}</div>[v-cloak]{display:none;}......
  • 支持复制粘贴word公式的eWebEditor编辑器
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • SignalR WebSocket通讯机制
    1、什么是SignalRASP.NETSignalR是一个面向ASP.NET开发人员的库,可简化向应用程序添加实时Web功能的过程。实时Web功能是让服务器代码在可用时立即将内容推送到连接的客户端,而不是让服务器等待客户端请求新数据。SignalR使用的三种底层传输技术分别是WebSocket......
  • DAY11笔记及补充
    今日默写:1.while循环2.for循环3.for in循环4.定义一个有名函数,并调用5.定义一个匿名函数,并调用6.HTML实现文件上传的标签7.实现prompt结合javascript实现四则运算的代码功能得分:100补充:1.注释:JavaScript不会执行注释。可以添加注释来对JavaScript进行解释,或者提高代码的可......
  • rails 前后端数据传递hash to json
    controller.rb@data={a:1,b:2}@data_new={"a":1,"b":2}index.htmlvararr=<%=@data%>#=>{:a=>1,:b=>2}vararr=<%=raw@data%>#=>arr={:a=>1,:b=>2}vararr=<%=raw@data_......
  • c++的前世今生
    C++语言是本贾尼·斯特劳斯特卢普在1982年发明的,早期版本被称为CwithClasses,之后在1983年更名为C++。C++语言在发明后很快就获得了广泛的应用,由于其具有高效、灵活和兼容性强的特点,成为了许多领域的首选编程语言。在计算机科学和工程领域,C++语言被广泛用于开发操作系统、......
  • 算法刷题记录:NC22227 约瑟夫环
    题目链接https://ac.nowcoder.com/acm/problem/22227解题思路模拟环。这道题顺序数就行,顺序是逆时针,逆时针的箭头是往左拐的,变成直线后趋于正半轴所以是+。不过,这道模拟环并没有说从idx号开始,往左/右数几个人,所以不需要考虑+或-。因为不会越界,所以也不用额外%n。AC代码......
  • 源代码管理工具GitHub介绍
    GitHub是一个基于Web的Git代码托管平台,该平台提供的服务包括代码托管、代码审查、协作、项目管理等,旨在帮助开发者更加方便地进行软件开发和协作。下面主要从GitHub主要页面功能和如何利用GitHub辅助完成团队项目两个方面进行简单的介绍。1.Git和GitHubGit和GitHub是两个东......