粉丝557获赞2937

哈喽,小伙伴们大家好,我是大嘟嘟,我之前有个视频聊过怎么使用 vs 扣的搭建一个私家家的极简便宜环境,他非常适合小白用来入门私家家的时候使用。 那今天我们来聊一聊怎么使用 vs co 的加 c mac 去创建一个更加通用的变异环境,这个环境可以很轻松的支持多几目录,新增依赖库,甚至可以跨平台的使用。那有的小伙伴可能会想啊, c mac 是怎么实现的这些功能呢? 那下面我们就一步一步的去了解这个问题。首先我们来看一看变异器是怎么工作的。以我们之前安装的 gcc 变异器为例, 当项目里只有一个 cpp 文件的时候, vs 扣子可以帮我们自动编写这个编辑器的命令,我们直接使用快捷键就能编辑这个场所。但如果项目里有多个 cpp 文件的时候,我们就需要手动的去编写编辑器的命令了。如果我们现在有这三个文件,那这个就是我们所需要 写的编辑器的命令。这么简单的文件都需要写这么长的命令,那可以预想到以后如果我们的文件越来越多,项目越来越复杂,那我们很难正确的去写出这个命令。为了解决这个问题,自动化构建的工具 mix 就诞生了啊,没错啊,它是 mix, 不是 c make。 有了 mac 工具,我们就不需要每次编辑的时候都写很多的编辑参数,而是根据 make 的语法,把编辑的过程和依赖的条件都写到一个 make file 文件里面。每次编辑的时候,我们只需要执行一个 make 命令就可以完成编辑的过程了。那一句话来总结, mac 实现了变异的自动化,我们不需要去写变异器的变异命令了,但是呢,那我们需要去写 make file, 那能不能更简单一点呢? make 提高了每次的变异效率,但是我们要去写很复杂的 make file 文件。这个时候就有人想了,既然变异能自动化,那能不能把生成 mate fire 文件的过程也自动化呢?哎,真的 可以,这是我们今天要用的这个 c mac。 一句话来总结呢, c mac 实现了生成 mac fil 的自动化,是不是感觉很绕啊?那没关系啊,我们来看一张图,把整个过程串联一下。 首先我们会根据原文件去编写 c max 的配置文件,这也是我们唯一要做的事。然后呢, c max 就会根据这个配置文件去生成 maxel, 最后 make 工具去根据 macel 调用变异器,变异器,最后来生成可制性文件,这就是我们整个的变异过程。 是不是这样一梳理就清晰很多了,那其实最终干活的呢?还是变异器,只不过我们把调用变异器的过程给自动化了。 对 cmea 我们有了简单的了解,下面我们来看一看怎么安装 samec, 并且怎么使用 cmacle 来变异我们的 cc 加程序。

上一个视频我们了解了怎么使用 c mac 去构建一个单文件的 c 加加工程,但实际开发中肯定不会只有一个文件,这次我们就来看一看更复杂的情况。 首先呢,我们要了解一下 c mac 的必要组成部分,这是我们使用 c mac tours 正常的配置文件,其实这里只需要三行就可以正常编映了,我们暂时只保留必要的部分。 第一行呢,规定了 c make 的版本不能低于三点零点零,这也是为了避免一些机器的 c make 版本太低,导致一些 c make 的语法不兼容的问题。第二行一共有两个信息,第一个信息是他定义了我们软件工程的名称。 第二个信息是他定义了我们软件工程的版本,我们可以使用这个版本来标记我们的开发过程。第三行表示我们要生成一个可执行文件,他的名称是泰斯特 c make, 然后他包含的原文件 慢点 cpp, 从这里我们就能看得到,如果我们以后要包含其他的原文件呢?我们需要在慢点 cpp 后面去加其他原文件的名称。我们先来变异和运行一下元代码, 可以看到程序已经正常执行了,证明我们的 cm 和配置文件没有问题。我们现在只有一个慢点 cpp 文件,因为内容非常简单,所以现在把功能和慢函数放在了一起。不过随着工程越来越大,我们会把不同功能的代码拆分到不同的文件里。现在我们就把 mac guar 这个函数拆分出来看一下, 可以看到变 编辑器提示我们找不到投文件,其实是因为工程并不知道我们投文件的路径在哪里,那我们只要告诉他我们投文件的路径就好了。 这里呢,我们向泰斯的 c 面和这个工程 添加了一个投文件路径,这个路径就是我们工程原代码的位置,下面我们再来看一下,那这里编辑期说找不到我们的函数,这是为什么呢?因为我们新加了原文件,但是呢 cmax 并不知道,所以编辑的时候并没有把它包含进来。 现在呢,我们就告诉 cmic, 我们增加一个原文件变异一下试试, ok, 可以看到变异通过了也能够正常执行。这就是 cmic 一个比较重要的点,我们需要编辑的原文件都要加到 cma 的配置文件里来。软件开发呢,有一个很重要的原则,就是不要重复造轮子,各种开关、社区设计模式,软件模块化编程都是在实践这个原则。所以开发过程中我们会遇到很多已经存在的苦, 或者我们的一些代码可以被其他的工程服用,这个时候我们就会把一部分代码编辑成库。那下面我们还是以这个 mac 怪尔为例,去看一看怎么去编辑出一个库,并把它链接到我们的工程里面。首先我们为库创建了一个目录,并且把用到的投文件和原文件都放到目录里来,那既然我们要把它编辑成库,那肯定要用到 cma 的配置文件。 刚才我们看到一个工程的 c 内科文件至少要包含三行才能正常变异,但是一个库呢,他只需要一行,下面我们要在主程序变异的时候也把这个库给变异了, 然后把库链接到我们程序里来, 最后看看我们刚才包含的投缘键目录,现在是不是已经发生变化呀?那我们再来把它修改一下, 这样呢,我们就完成了一个酷的变异和链接的过程。那我们今天的视频也就到这里了,如果觉得视频有用请点赞关注,也可以在留言区跟我一起讨论,我是大嘟嘟,我们下次再见。


什么是 makel 呢? makel 是我们 linux 中一个非常重要的一个东西,你看这是现在这个桌面上看到的,这就是我的一个呃, linux 的一个工程啊,这个很多很多个点 c、 点 h, 然后他们共同组成了一个工程,去完成了一个特定的一个功能,他的 makel 在这里,这个就是他的 makel, 然后现在我先点开单线机,单线机的 q, 我们看我们的程序是怎么生成的, 当我们写好代码之后,我们直接点点击这先预编译,然后再编译。啊,现在我这个是有个错误啊,如果我们没有错误的情况下,就是我们的下载器连好我们的板子,我们直接点击这个肉的啊,程序就烧到我们百字格去了。在单信息里面我们是这这么个操作方法,但是在 linux 里边我们应该怎么去操作呢? 我们就是通过这个 maxfill 来啊,生成呢就这么一个可执行文件,这一个 maxfill 就把所有的文件然后给他串联起来,最后就生成了这么一个可执行文件,我们只需要把这个可执行文件考到我们对应的板子里边去,然后运行他,这时候 他就可以像我们单线机里边,这这个就相当于是我们单线机里边的一个点 c 和一个点 h, 然后这个就是最终生成的文件,我们把它放到我们的板子上,把那些入口参数什么给他加好,然后我们直接运行,他就能按照我们这个程序代码里边所写的这个逻辑功能,他就一步一步的去执行和实践了。 makesale 说白了就是把这个一堆啊点 c 和点 h 给它串联起来,生成一个可执行文件,这个就是 makesale, 你理解了吗? 这个呢是我的微信,有什么问题呢?可以直接加我的微信,私聊我,点赞加关注,持续为你分享更多的嵌入式开发开发干货知识点。

第二章第四节使用 c make make 构建系统到目前为止,我们所有的例子使用的都是 q make, 那后面的例子呢?也将会使用 q make, 只有这一节的例子,我们会使用 see make 构建系统。 到底什么是 c mac 啊? c mac 是一个功能强大的跨平台构建工具,它通过与平台、与编细无关的配置文件,控制软件的构建过程,它会生成 macfi 文件或是 ide 的项目。那如果你经常会做一些 开源软件相关的开发,那么对这个软件应该是不陌生的。我们经常会用 c mac 来构建相应的系统,因为他只提供原文件,那你要在不同的平台上,不同的你使用不同的编辑器,那你就用这个描述好了,然后其实配置文件就对项目的描述,通过和描 处理,精心配置,就生成你本机环境的这样的一个项目,生成一个 id 的项目,那 q t 六本身它其实就是用 c m a q 构建的。 好,我们来看一下这节课我们的任务也就是换一种方式去实现。我们啊在前面章节里面完成过,完成过的任务,那我们要做的其实挺简单的啊,就是选择的时候呢,在选择到 build system 的时候,我们这里面选择 seemic, 而不是以前的 q maker。 当我们生成一个工程的时候,然后这里就不是点 p r o 文件了,而是一个 t x t 文件,不管你的项目名称叫什么,这个文件都是这个啊,叫独角 c max list, 点 t x t 文件。然后我们可以大致的看一下这个文件里面内容啊,基本都能看懂,像这个 mini 的 record 就是最低的 版本要求呗。然后这个是啊,我们项目的名称,项目的版本,对吧?语言是 c 加加,这是关于我们工程,然后这个就不是我们前面讲的吗? uic m o c r c c 三个 compiler, 让它自动开启,对吧? 然后都是 c 加加的版本,然后是否是要支持,对吧?都是这个。那重要的其实是 find the package, 还有一个叫 texture link library, 但这两项其实你不需要太关心,当你需要导入某一个模块的时候,其实你在办公室文档里面你都能到搜的到啊,相应的这种 这种字段啊,这种描述,你直接复制粘贴进来就好了,其他的像资源文件,对吧?这一看就这样的,都是我们相应的 cpp 啊啊,点 h 啊,点 ui 文件,那这些基本上都 会自动去加载进去的啊,不需要我们太多的关心。那书上呢,也有比较详细的介绍,那这里面我们就不过多介绍了,我们直接来 来上项目。那我们直接来把我们前面做过的例子重新来做一遍。那这一次呢?我们不会全部把代码重新敲一遍啊,我们会把前面用到的 c 加加文件啊,点 h 文件,包括 u i 文件啊,铝 south 文件,我们直接拿过来拷贝进来用就好了,其实都是一样的,只是工程描述不同嘛,对吧?用到的这个语法呀, a p r 其实都是一样的。 打开 q t creator, 新建一个项目,选择 q t v g 的 vacation。 那这里注意,以前是中文路径,我这里改成了英文路径,因为 simic 它是不支持中文的啊,不支持中文路径,二杠四,二杠四还是一样啊, 下一步其他都一样,这个地方选择 c mac, 然后下一步同样选择 qdalog, 我们还是要生成一个 ui 文件, 然后下一步选择开发套件,下一步 finish。 整个流程其实和以前是差不多的,只是我们选择的时候注意路径,不要有中文。然后呢,我们啊选择 say make 作为 build system, 勾结完以后,我们就会看见这里有 say make list, 点点 t x t, 你打开呢,就可以看见一些配置了啊,包括我们这里面有哪些文件, 那我们最关心的可能是加载了哪些模块,他这里面有一个 link library, 但是不用担心啊,你只要去在帮助里面去搜索任何一个模块,他都会在最上面的位置就有,你直接贴过来 就好了,像这里也是好,那么我们现在如果自己去写的话,就会很慢,对吧?其实做的事情呢,就和前面也差不多。还有一点,你会发现这个地方啊, 它的位置发生了变化,也就是 seemic, 你可以去选择在里面去看一看啊,相关的一些目录的东西,那总之它的 深层的目录那可能也和以前和 q max 相比也会有些变化,那这也很正常。然后你可以把先把默认的跑起来确认啊,没有问题以后我们再去进行一个替换,我们把我们前面 学过的内容做好的文件给他考进来。哎,是不是抛起来是差不多的,对吧,我们在这里面编辑就好了。 ok, 我们再看一下他的具体的位置啊,我们打开相应的目录啊,在这里我们会有一个深层的文件夹 啊,在这个文件夹下面呢,我们去找。哎,好像没有啊,以前就是在这个目录下面的,就会有一个 ui 的投文件,那它在哪里呢?它实际上应该是在这里。 oto 啊, autogenerate 吗?这是一个缩写,就是说我们自动生成的都在这里。好,这里面有个 include a ui 下杠啊, dialog 它是放在这里了,那包括其他的文件,你也可以去看一看,这是 mark 的,对吧?相关的,那我们后面呢,还会有资源文件。 好,那么我们就先把我们前面的课程我看看啊,应该是二杠二,对吧?这里面有 ui 文件,有点去文件,有 cpb 文件,包括有图片啊,有资源文件,其他的都不用改吧,然后把这些都考下来。 control c, 然后呢?放这来覆盖,好替换,但如果仅仅是这样的话,我们重新编译一下,我们试一下,看啊,看行不行。 这里有一个问题,就编辑器可能不知道文件被修改了,那他你像你去打开这个 ui 文件,他是没有没有小星星的,上面就是没有修改这个文件,那 cmak 就不会去重新去用 uic, 去去去生成啊,新的社交加文件,对吧?所以你这样跑起来的效果是什么呢? 我们试一下,哎,发现没有变化啊,没有变化,那我们就给他改一改呗,对吧?我们随便改一改,像这里面我们就可以给他写成啊, c mac 版本,那包 包括我们如果想换,咱们选中这个地方,我们选搜索 title, 那就是修改它的名称,对吧?左上角的名称,这个呢,我们也就是 famic 构建。 好,那我们现在在运行,现在他就知道了啊,这个是修改过的,我需要重新去编译他,那么现在看有了吧?好,他发现不起作用,这不起作用又是为什么呢? 这还是一样啊,还是相应的文件,我们可能就他不知道变化了,对吧?我们把它稍微摁一下,那里有个小心心以后,然后我们再保存,我们再或者是投文件也一样吧。啊,这样一下,因为我们调用这个 mark 的时候, m o c, 这个,这个 compiler 的时候,实际上他看中的是这个投文件,像这些红啊什么的,对吧?像这些东西。好,那我们再再编译 好,我们现在再试一下下滑线,有了鞋体,他加粗变颜色,清空抓是不是都可以了?点确定 ok, 但现在其实还是有问题,我们现在图标没有啊,我们打开这里,在下面给他加上,其实我们考过来了,叫绿色老师,点 q r c 对吧?点 q r c 他应该找得到的他, 然后你点确定的,点保存的时候, ctrl s 的时候,它会自动就给你开始构建了。那看把它也放进来了啊, icon 呢?也在里面了。好,那现在我们再跑起来看一下,是不是能看见图标,因为我们以前的原码里面其实都是已经配好了的。好,你看这些 图标是不是也都有了,所以差别不大,对吧?我们只要注意一个中文目录的问题,然后呢,如果你是复制粘贴的方式的时候,其实这个和 q maker 啊,和 q maker, c maker 也没有太大的关系啊。 那我们要考进来东西的时候,因为你不是一步步生成的,他不会自动放进去,放到 cmak 里面去啊,放到这个 tik 文件里面,那你就要自己首通加一下, ok。

什么是 make file? lanex, 初学者一定要收藏好 make file 是用来告诉 make 如何编译链接一个程序,它是 make 独入的唯一配置文件。一个 make file 通常包含以下内容,一、需要创建的目标体。二、创建需要的依赖文件。三、 创建目标题是需要使用的命令。点赞加关注,避免更多的干货分享出来你看不到,如图中所示,我们通过在终端输入一个 mac 命令, 就可以生成一个最终可以直接运行的一个可执行文件。通过它内部的命令自动链接了很多文件。例如一个程序中有八个 c 文件,三个 h 文件,生成可执行文件的时候,我们可以用 make file 将这些文件链接在一起,生成一个可行的 文件,非常方便我们修改程序,有的同学会问了,我怎么自己写一个 macby, 我通常的做法是拉一个 sdk 包中的历程,在这个基础上修改现成的框架,现成的结构,非常方便我们操作。

如果只看 mifa 语法的情况下,他会有多简单呢?以及 mifa 为我们解决的核心问题是什么呢?我们来带着问题来看一下, 直接上代码。我们举个例子,比如说我们现在炒一盘菜叫西红柿炒蛋,那我们通常需要用到两个原材料,一个叫鸡蛋,一个叫西红柿, 那咱们把文件里面写上他的名字,西红柿。 那咱们有两个原材料过后,是不是可以把它炒一盘菜?那炒菜的过程我们可以用你那个死 cat 指令来模拟咱们 cat 西红柿,然后蛋得到一个菜,那这这个意思是说我把西红柿和蛋合并一下,变成 个菜文件,那咱们看这菜这个文件是不是就西红柿蛋,对不对?就说明咱们菜炒好了,这是咱们用指令来模拟的一个样子。那咱们来看一下 mifa 怎么能解决这个问题啊?咱们新进 mifa 文件, 好,我们定义他的一代关系,那一代关系是什么?就是菜,一袋西红柿,一袋鸡蛋,对吧?那他炒的过程就是 cat 西红柿,然后蛋菜,对吧? 同样的方式咱 make 执行一下,或者直接 make 菜也行,对吧?他告诉你这个菜是最新的,对不对?那此时如果说我鸡蛋这个原材料我换了一下,我换成土鸡蛋呢?那如果我要重新去 make 一下,他就告诉你,哎,这个菜 更新,这个菜变成了西红柿炒土鸡蛋,那同样的,如果说我已经嗯已经炒过一次菜了,如果再炒第二次菜,他就告诉你菜是最新的,不用接着炒了。那如果这个时候再把西红柿变成一个,嗯,新的西红柿蛋, 新的西红柿,你看你再去炒这个菜,你会发现他又帮你炒了一次,对不对?所以你会发现里面有一个什么样的概念呢?是不是他帮你去做的时间检查,对吧?就是说,说白了就是你菜是不是最新的,如果你菜是最新的,就会告诉你不用去 好了,如果你的菜不是最新的,他就会帮你炒一次,那这个是整个过程实现逻辑,那咱们可以看没法为咱们解决什么核心问题呢?第一个依赖关系定义, 就比如咱们这边写的那个菜,一袋西红柿和鸡蛋,对吧?然后第二个就是时间检查, 就是他会判断菜和西红柿就是你的原材料有没有得到更新,如果得到更新我的菜就得重新炒一遍,对不对?所以他为你解决的就是时间检查,所以这个其实是 max 为咱们提供的核心功能,也是他的唯一的功能。不要觉得他还有其他花里胡哨的能力啊,他就只解决这两个问题,所有一切需要这两个。 嗯,解决方案的都可以用美发尔来做,也就是说你不要觉得他就是企业家的一个编,编议的一个东西,他其实可以解决任何东西的变异,只要是符合这两点需要的一个东西,他都可以帮你解决,所以这是美发的一个定位,所以他的 大着呢,对吧?那咱们看看这个图,这个图表示了 mifer 他的一个嗯,代码玉,那这个代码玉就是咱们写 mifa 的时候要区分你写的代码是代表什么含义的一个东西。那看懂的这张图整个 mifa 就结束了,就这些东西, 第一个预示变量定义,就像你写代码要定义变量一样。第二个是依赖定义,就是咱们依赖关系的一个定义,就跟刚才一样,我的菜依赖鸡蛋和西红柿。 第三个是 come 的语,相当于是希尔指令,这个希尔指令就是你生产你的菜的过程。那所以希尔指令通常比如说我们在企业家里面会写基家家的一些指令来生成咱们编辑的一些结果就是同样的道理,对吧? 由此我们可以看到 mifer, 他其实为我们提供的功能非常简单,非常简单,就是依赖关系定义和时间检查。那所以你还会觉得 mifer 很难吗?



