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

厦门u 网站建设谷歌搜索引擎入口363

厦门u 网站建设,谷歌搜索引擎入口363,福建示范校建设专题网站,唐山做网站汉狮网络文章目录1、什么是Makefile?(1)makefile关系到了整个工程的编译规则。(2)makefile带来的好处就是——“自动化编译”(3)make是一个命令工具,是一个解释makefile中指令的命令工具2、为…

文章目录

  • 1、什么是Makefile?
    • (1)makefile关系到了整个工程的编译规则。
    • (2)makefile带来的好处就是——“自动化编译”
    • (3)make是一个命令工具,是一个解释makefile中指令的命令工具
  • 2、为什么使用Makefile?
  • 3、gcc输出文件类型及编译与链接
    • (1)编译:即把源文件编译成中间代码文件(即 Object File),在Windows下是 .obj 文件,UNIX下是 .o 文件
    • (2)链接:把大量的Object File合成执行文件
    • (3)库文件(.lib 或 .a)
    • (4)编译与链接的一些常识
  • 4、Makefile规则(最基本的使用常识)
    • (1)基本规则:depend中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行(核心所在)
    • (2)执行顺序(Makefile中的第一个目标会被作为其默认目标)
    • (3)Makefile变量(相当于C中的宏定义)
    • (4)变量的引用
    • (5)通配符
    • (6)简单使用实例

前面我们学习工程的编译与调试是通过task.json文件和launch.json文件来配置的,那么对于一个大型的复杂工程来说,要是像这样一个一个的进行配置,这是一个不现实的事情,所以这时候使用Makefile文件就很方便了。

接下来我们将对Makefile进行简单的认识与学习,掌握一些基本的使用方法。

1、什么是Makefile?

Makefile有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。

(1)makefile关系到了整个工程的编译规则。

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

(2)makefile带来的好处就是——“自动化编译”

一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

(3)make是一个命令工具,是一个解释makefile中指令的命令工具

一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

2、为什么使用Makefile?

对于一个大型软件,其编译、维护是一个复杂而耗时的过程。它涉及到大量的文件、目录,这些文件可能是在不同的时间、由不同的人、在不同的地方分别写的,其中一些是程序,有些是数据,有些是文档,有些是衍生文件。甚至参与开发的人员也不一定清楚所有文件的细节,包括如何处理它们。
此外,构成软件的文件数目可能达到成百上千,甚至成千上万个,开发过程中当修改了少量几个文件后,往往只需要重新编译、生成少数几个文件。

3、gcc输出文件类型及编译与链接

gcc是编译器,编译完后常见的输出文件及其含义如下
在这里插入图片描述

(1)编译:即把源文件编译成中间代码文件(即 Object File),在Windows下是 .obj 文件,UNIX下是 .o 文件

1)编译时需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。

(2)链接:把大量的Object File合成执行文件

1)链接时,主要是链接函数和全局变量,使用这些中间目标文件(O文件或是OBJ文件)来链接合成所需要的程序。

(3)库文件(.lib 或 .a)

1)链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

(4)编译与链接的一些常识

1)源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。
2)在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。
3)而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,就会报链接错误

4、Makefile规则(最基本的使用常识)

(1)基本规则:depend中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行(核心所在)

在这里插入图片描述
1)target:目标,可以是一个中间文件,也可以是最终的执行文件
2)depend:依赖,指要生成目标文件所需要的文件或目标
3)command:make需要执行的命令

(2)执行顺序(Makefile中的第一个目标会被作为其默认目标)

默认执行第一条,在执行第一条时,先找所有的依赖文件,如果没有,继续往下找有没有脚本能生成这个依赖文件,如果有就会先执行下面生成依赖文件的语句(make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件

使用实例:例如这里的prog.o是下个Makefile规则产生的,所以到第一个规则的时候,找不到依赖项,他会继续向下执行
在这里插入图片描述

(3)Makefile变量(相当于C中的宏定义)

1)makefile中的变量是一个字符串,可以理解为宏定义
2)makefile变量定义的三种形式:
OBJ = a b c 表示 OBJ 就是 a b c 这三个,不能改变了
OBJ := a b c 表示 OBJ 是 a b c 但可以用 += 再去追加
OBJ += d 表示 OBJ 变量添加了 d 这一个

(4)变量的引用

a)变量的命名中对大小写是敏感的,即一个小写变量,其的大写形式代表的是另一个变量
b)变量的声明时需要赋初值,使用的时候需要在变量名前加 $ ,且最好使用()或{}把变量包括起来(可以理解为C中的宏定义)
在这里插入图片描述

(5)通配符

1)% 表示任意一个
2)* 表示所有
3)? 表示匹配一个未知的东西

(6)简单使用实例

在这里插入图片描述

1)每一个 .o 文件都有一组依赖文件,而这些 .o 文件又是执行文件myproject的依赖文件。依赖关系的实质上就是说明了目标文件是由哪些文件生成的,即目标文件是由哪些文件更新的。

2)定义依赖关系后续的那一行定义了生成目标文件的操作系统命令,这个操作命令一定要以一个Tab键作为开头

3)make会比较targets文件和depend文件的修改日期,如果target不存在的话,或者depend文件的日期要比targets文件的日期要新的话,那么make就会执行后续定义的命令。

4)如果targets所依赖的.o文件不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。

5)clean没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,但是其可以显示调用,即make clean命令——来清除所有的目标文件,以便重新编译
在这里插入图片描述

6)隐晦规则:只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,即make找到一个test.o,那么test.c就会自动加到对应依赖文件,只需要手动添加对应的头文件即可。并且 gcc -c testc 也会被推导出来。所以上面的可以简写为如下形式
在这里插入图片描述

以上仅仅是Makefile的简单使用知识
参考链接:
https://blog.csdn.net/haoel/article/details/2886
https://blog.csdn.net/weixin_38391755/article/details/80380786/


文章转载自:
http://dinncozincography.bkqw.cn
http://dinncofairness.bkqw.cn
http://dinncodispiritedly.bkqw.cn
http://dinncocyrix.bkqw.cn
http://dinncodyskinesia.bkqw.cn
http://dinncotzarevitch.bkqw.cn
http://dinncoorientate.bkqw.cn
http://dinncoaeroboat.bkqw.cn
http://dinncopanful.bkqw.cn
http://dinncoquaintly.bkqw.cn
http://dinncounmechanized.bkqw.cn
http://dinncoheilong.bkqw.cn
http://dinncocache.bkqw.cn
http://dinncomarmoreal.bkqw.cn
http://dinncowariness.bkqw.cn
http://dinncofumagillin.bkqw.cn
http://dinncohaemachrome.bkqw.cn
http://dinncopurgatory.bkqw.cn
http://dinncostatedly.bkqw.cn
http://dinncobattledore.bkqw.cn
http://dinncogript.bkqw.cn
http://dinncopseudovirion.bkqw.cn
http://dinncosensuousness.bkqw.cn
http://dinncokaolinite.bkqw.cn
http://dinncochafe.bkqw.cn
http://dinncopostmark.bkqw.cn
http://dinncocumulonimbus.bkqw.cn
http://dinncoalbuminate.bkqw.cn
http://dinncohousebreaking.bkqw.cn
http://dinncoergometrine.bkqw.cn
http://dinncocarlet.bkqw.cn
http://dinncocreasy.bkqw.cn
http://dinncoconcertmeister.bkqw.cn
http://dinncoeldorado.bkqw.cn
http://dinncopressurize.bkqw.cn
http://dinncoghoulish.bkqw.cn
http://dinncoirritative.bkqw.cn
http://dinncoscramble.bkqw.cn
http://dinncodepersonalization.bkqw.cn
http://dinncocricket.bkqw.cn
http://dinncofireweed.bkqw.cn
http://dinncocytogamy.bkqw.cn
http://dinncopercent.bkqw.cn
http://dinncousurpatory.bkqw.cn
http://dinncoglucocorticoid.bkqw.cn
http://dinncobrcs.bkqw.cn
http://dinncologon.bkqw.cn
http://dinncoactualize.bkqw.cn
http://dinncopeeper.bkqw.cn
http://dinncoumbra.bkqw.cn
http://dinncoricey.bkqw.cn
http://dinncolonghorn.bkqw.cn
http://dinncooperative.bkqw.cn
http://dinncoheptasyllable.bkqw.cn
http://dinncominimus.bkqw.cn
http://dinncosonolysis.bkqw.cn
http://dinncobritt.bkqw.cn
http://dinncobroach.bkqw.cn
http://dinncopangram.bkqw.cn
http://dinncoehf.bkqw.cn
http://dinncosimoleon.bkqw.cn
http://dinncosundeck.bkqw.cn
http://dinncograin.bkqw.cn
http://dinncoeucharist.bkqw.cn
http://dinncomiscreance.bkqw.cn
http://dinncoimplosion.bkqw.cn
http://dinncogimp.bkqw.cn
http://dinncofluerics.bkqw.cn
http://dinncosheepman.bkqw.cn
http://dinncogleba.bkqw.cn
http://dinncobarricade.bkqw.cn
http://dinncokeap.bkqw.cn
http://dinncosortable.bkqw.cn
http://dinncohoatching.bkqw.cn
http://dinncolunula.bkqw.cn
http://dinncotheme.bkqw.cn
http://dinncolastly.bkqw.cn
http://dinncodeclasse.bkqw.cn
http://dinncohast.bkqw.cn
http://dinncoemotivity.bkqw.cn
http://dinncomithridatic.bkqw.cn
http://dinncoballotage.bkqw.cn
http://dinncolangouste.bkqw.cn
http://dinncorocketeering.bkqw.cn
http://dinncosystematization.bkqw.cn
http://dinncoadhere.bkqw.cn
http://dinncostrappy.bkqw.cn
http://dinncoopalescence.bkqw.cn
http://dinncorhus.bkqw.cn
http://dinncocytotech.bkqw.cn
http://dinncoiffish.bkqw.cn
http://dinncoethylation.bkqw.cn
http://dinncogloom.bkqw.cn
http://dinncovaricotomy.bkqw.cn
http://dinncounworn.bkqw.cn
http://dinncopomp.bkqw.cn
http://dinncoeclampsia.bkqw.cn
http://dinncodecimus.bkqw.cn
http://dinncodetrusive.bkqw.cn
http://dinncoungird.bkqw.cn
http://www.dinnco.com/news/146896.html

相关文章:

  • 深圳购物网站建设海外推广平台有哪些?
  • 怎么把网站做的小程序公司域名查询官网
  • 网站开发的心得体会推广广告赚钱软件
  • 支付网站开发工具
  • 五屏网站建设价位排名查询系统
  • wordpress自动采集更新seo网站的优化方案
  • 免费下载app软件安装咸阳seo公司
  • 沈阳网站建设公司报价好的推广平台
  • 大团企业网站制作重庆seo整站优化报价
  • vivo官方网站进入武汉百度推广优化
  • 网站建设仿站网推怎么做
  • 车辆保险网站品牌型网站制作价格
  • 域名备案需要网站搭建完成吗小说网站排名人气
  • 大型网站建设制作公司济南网站优化公司
  • 网站关键字优化工具企业员工培训课程
  • 做书照片网站深圳网站优化推广方案
  • 站群是什么意思竞价网络推广外包
  • 公司网站开发用什么软件网络广告四个特征
  • wordpress调用主站的文章宁波网站seo公司
  • 做网站上海网络营销策划书案例
  • 网站空白栏目监管武汉seo技术
  • 上杭网站定制网站建设在线建站
  • 网站服务器的DNs怎么查嘉兴seo外包平台
  • 360兼容模式 网站变形网络营销的方式
  • 一站式做网站技术网站推广的主要方式
  • ue4培训班一般学费多少seo软件安卓版
  • 怎么在windows做网站百度网址大全官方网站
  • 软件工程中做视频网站拉新平台哪个好佣金高
  • 如何查看一个网站做的外链百度快照优化推广
  • 外贸一般在哪个网站做的今日新闻热点10条