当前位置: 首页 > news >正文

低价网站建设怎么样哈尔滨seo公司

低价网站建设怎么样,哈尔滨seo公司,保定网站建设哪家好,网站建设业务活动​ ​#x1f4dd;个人主页#xff1a;Sherry的成长之路 #x1f3e0;学习社区#xff1a;Sherry的成长之路#xff08;个人社区#xff09; #x1f4d6;专栏链接#xff1a;Linux #x1f3af;长路漫漫浩浩#xff0c;万事皆有期待 上一篇博客#xff1a;Linux编译…​ ​个人主页Sherry的成长之路 学习社区Sherry的成长之路个人社区 专栏链接Linux 长路漫漫浩浩万事皆有期待 上一篇博客Linux编译器 gcc/g的使用初识动静态链接库 文章目录 一、前言二、概念三、代码实现四、实现原理1、依赖关系和依赖方法2、清理① .PHONY 伪目标② .PHONY 的取舍 3、make 确定是否编译的方法4、完整代码 Linux第一个小程序 - 进度条行缓冲区的概念\r和\n进度条代码及效果展示 总结 一、前言 上篇博客我们学习了 gcc 编译器。学会了如何在 Linux 上编译C语言代码。如果有上百个源文件难道一个个都用 gcc 编译为 .o 文件最后将它们一起链接起来 有没有一种方法使编译更加快捷一定程度实现自动化编译 可以使用 make/makefile 构建一个简单的自动化工具。 二、概念 makefile makefile 是一个文件。它是一个工程文件的编译规则描述了整个工程的编译链接等规则。 写好的 makefile 文件可以使用一行命令来完成 “自动化编译” 从而完成对工程的编译极大提高效率。 make make 是一个命令工具用来一个解释 makefile 中文件中的指令。 当已经编写好 makefile 文件后只需要使用 make 就可以执行 makefile 中的内容。 一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作。所以使用好 make/makefile 可以使得开发更加得心应手。 总结make 是一条指令makefile 是一个文件两个搭配使用完成项目自动化构建。 三、代码实现 在讲解 make/makefile 之前我们先写一个小 demo 以这个 demo 为基准对其进行讲解。 makefile 文件需要创建在当前工程的目录下makefile 文件的名称可以为 makefile 或 Makefile 假设当前工程下已经有了一个 test.c 我们直接开始 demo 的编写 这样 makefile 就编写好了就两句话这时编写的 makefile 可以完成对程序的编译。 我们返回终端使用 make 就可以对 test.c 进行编译 使用 make 指令后makefile 的第二行内容被打印在终端并且生成了可执行程序 test test 程序也是可以执行的。 四、实现原理 1、依赖关系和依赖方法 在 Makefile 文件中有这样一句话 test:test.c刚刚测试过我们知道 test 是目标文件而 test.c 则是原始文件。 而 test.c 经过 gcc test.c -o test 生成 test 文件。 它们的关系 test 依赖 test.c 生成所以 test.c 是 test 的依赖文件 。它们之间的关系被称为 依赖关系 。test.c 生成 test 需要通过 gcc test.c -o test 指令这条指令就是 依赖方法 。 依赖关系 和 依赖方法 如何理解呢 我们通过一个 makefile 理解一下 在 makefile 文件中共有四组依赖关系和依赖方法 当使用 make 调用 makefile 文件中内容时便开始执行 makefile 中的内容 test 依赖于 test.o 但是 test.o 并不存在跳转到下一组依赖关系 test.o 依赖于 test.s 但是 test.s 并不存在跳转到下一组依赖关系 test.s 依赖于 test.i 但是 test.i 不存在跳转到下一组依赖关系 test.i 依赖于 test.c test.c 存在这时开始执行依赖方法 由此开始逐渐执行上面的依赖方法一层层回退逐渐生成 test.i 、test.s 、test.o 最后生成可执行程序make 执行完毕。我们发现这一过程就像 数据结构的栈 。 当目标文件所依赖的文件不存在时就会将依赖方法入栈知道依赖关系匹配了再执行相应的依赖方法在按照栈的规则逐渐将栈中的元素出栈规则满足后进先出。 为了验证这些步骤是否都被执行我们 make 一下看看 依赖方法对应的文件都产生了所以依赖关系和依赖方法必须同时具备并正确缺一不可 。 2、清理 平时写代码时经常需要反复编译执行代码。 而在下一次重新编译之前需要清理一下上次生成的可执行程序。但是清理的时候可能清理错误不小心把源文件删了这时又造成了问题。 而上面的步骤我们也生成了很多附加文件(如 test.i 等)。 所以我们基于 demo 增加一个清理功能 使用 make 测试一下 文件也都删除了。 这是为什么新增语句是什么意思 ① .PHONY 伪目标 .PHONY 修饰的对象是伪目标伪目标的特性是总是被执行的。 .PHONY 修饰的一定能被反复执行但是能被反复执行的不一定被 .PHONY 修饰。 多次执行 make 和 make clean 试试 注makefile 默认从上到下扫描只会执行第一组的依赖关系和依赖方法所以默认执行第一组这时使用 make 就可以而 clean 为第二组所以需要 make clean 加上对应的关系。同理对于第一组使用 make test 也能执行。 第一组关系没有被 .PHONY 修饰而不能重复执行。但是第二组 clean 可以重复执行 。 但是怎么证明 .PHONY 修饰对象之后对象能被反复执行我们再验证一下给 test 加上修饰 加上 .PHONY 修饰后make 可以执行多次了证明了 .PHONY 的作用。 但是能被反复执行的不一定被 .PHONY 修饰就比如 clean 当 clean 去掉修饰之后依然能被反复执行。 ② .PHONY 的取舍 一般对于编译来说是不加 .PHONY 修饰的。 因为编译是十分耗时间特别是当工程量很大的时候编译一两小时都不为过。所以防止对未修改的程序反复编译 一般编译时不加修饰。 但是 清理clean 是可以多次执行的因为删除不太浪费时间且可以反复清理确认是否清理完毕。并且为了肯定清理可以被多次执行所以通常用 .PHONY 修饰。 3、make 确定是否编译的方法 上面我们测试 make 时发现当编译过一次后继续使用 make 就无法继续编译了。但是 clean 是可以不加修饰反复执行的。 make 是如何确定是否要编译 对于程序来说时间有两条线。第一条是源代码时间的一条线第二条是形成的可执行程序的时间的一条线 。而它们之间的次序是先有源代码再有可执行程序。 所以只要可执行程序的最近修改时间比源文件的修改时间晚就认为当前可执行程序是最新的为了减少时间和其他开销于是不执行编译反之执行编译 。 我们再重新生成可执行程序并重复 make 观察它们的时间 这里就要用到 stat 指令它的 modify 就是最近修改时间 如果对 stat 指令不了解的可以看这一篇【Linux】基本指令(一) 在 ls 指令部分 可执行程序 test 的时间明显比 源代码 test.c 晚所以 make 并不能起作用。 那么基于对这个概念的理解我们能否用其他方法再次执行 make touch 指令为创建一个文件。若文件不存在则会创建一个文件若文件存在则会把文件时间更新到最新。 使用 touch 更新一下 test.c 的时间用 stat 观察时间并反复 make 试试 由此我们发现可以使用 touch 来 “欺骗” make 来反复编译。这也侧面证明了 make 对于是否编译的决策是基于修改时间而并不是基于文件内容是否修改 。 4、完整代码 test:test.cgcc test.c -o test .PHONY:clean clean:rm -f test.i test.s test.o test对于依赖关系而言: 左边为目标文件: 右边为依赖文件 依赖方法前需要有一个 tab 为固定格式 : 右边可以有多个依赖文件 : 右边通常被称为依赖文件列表 对于 : 右边目标文件对应的依赖文件列表可以为空 (例如 clean) makefile 默认执行第一组的依赖关系和依赖方法对于第一组可以直接使用 make 执行后面则需要 make 目标文件 .PHONY 修饰的 伪目标可反复执行 但反复执行的不一定是伪目标 Linux第一个小程序 - 进度条 行缓冲区的概念 首先我们来感受一下行缓冲区的存在在Linux当中以下代码的运行结果是什么样的 对于此代码当然是先输出字符串hello world然后休眠3秒之后结束运行。那么对于以下代码呢 可以看到代码中仅仅删除了字符串后面的’\n’那么代码的运行结果还与之前相同吗 答案是不相同该代码的运行结果是先休眠3秒然后打印字符串hello world之后结束运行。该现象就证明了行缓冲区的存在。 显示器对应的是行刷新即当缓冲区当中遇到’\n’或是缓冲区被写满才会被打印出来而在第二份代码当中并没有’\n’所以字符串hello world先被写到缓冲区当中去了然后休眠3秒后直到程序运行结束时才将hello world打印到显示器当中。 \r和\n \r 回车使光标回到本行行首。 \n 换行使光标下移一格。 而我们键盘上的Enter键实际上就等价于\n\r。 既然是\r是使光标回到本行行首那么如果我们向显示器上写了一个数之后再让光标回到本行行首然后再写一个数不就相当于将前面一个数字覆盖了吗但不使用’\n’进行换行怎么将缓冲区当中数据打印出来 这里我们可以使用fflush函数该函数可以刷新缓冲区即将缓冲区当中的数据刷新到显示器中。 对此我们可以编写一个倒计时的程序。 在输出下一个数之前都让光标先回到本行行首就得到了倒计时的效果。 进度条代码及效果展示 知道了\r这个概念我们就可以实现一个简单的进度条了。 效果展示 总结 今天我们学习了自动化构建工具 —— make/makefile 重点了解了 make/makefile 的规则上。实际开发中好的 make/makefile 可以让项目开发事半功倍。接下来我们将继续学习其他Linux环境基础工具的基本使用及配置。希望我的文章和讲解能对大家的学习提供一些帮助。 当然本文仍有许多不足之处欢迎各位小伙伴们随时私信交流、批评指正我们下期见~
http://www.yayakq.cn/news/4278/

相关文章:

  • 大淘客联盟做网站手机怎么创建网页链接
  • 服务器搭建网站跑不满宽带新闻热点事件2022
  • 免费的行情软件网站下载免费网站建设方案 前台 后台
  • 建设工程信息网站有哪些wordpress调整配置出错了
  • 网站的功能有哪些如何经营网店
  • 广州商城网站建设唐山网站建设求职简历
  • 河北省住房和城乡建设厅新网站安康市110报警平台
  • 广州做企业网站找哪家公司好网店代运营哪里有
  • 汕头门户网站建设芜湖网页美工设计
  • 专业网站有哪些平台网页制作策划路程怎么写
  • 东莞网站建设方案外包企业网站改版价格
  • 公司有网站域名后如何建网站网站建设pc指什么软件
  • 呼和浩特网站建设哪家好竞价排名软件
  • 北京做网站制作公司制作短视频最好的软件
  • pc网站制作公司寺庙网站素材
  • 潍坊专业网站建设哪家好宿迁网站建设哪家最好
  • 网站建设管理员海外新闻app
  • 创建5a 网站建设要求多个域名 一个网站
  • 开个捕鱼网站怎么做有谁做网站
  • 做行业导航网站七牛 wordpress 视频处理
  • flash网站源文件下载wordpress用阿里云图床
  • 网站域名注册后怎么建设wordpress主题页面底部编辑
  • 网站建设费维护费自助建设视频网站
  • 河南省建设工程网站科技馆网站建设方案
  • 做外链哪个网站好专业网站设计是什么
  • 官方网站数据如何做脚注随州网站制作价格
  • 北京做手机网站的公司套模板网站价格表
  • 网站改域名备案做网站需要用到哪些开发软件
  • 郑州公司网站制作兼职做网站编辑
  • 视觉传达设计网站山西seo和网络推广