简述什么是make和makefile(在linux系统应用make命令时,makefile 与makefile有何区别)

2024-07-20 07:08:52 6

简述什么是make和makefile(在linux系统应用make命令时,makefile 与makefile有何区别)

本文目录

在linux系统应用make命令时,makefile 与makefile有何区别

  Make命令  在linux make命令后不仅可以出现宏定义,还可以跟其他命令行参数,这些参数指定了需要编译的目标文件。其标准形式为:  target1     方括号中间的部分表示可选项。Targets和dependents当中可以包含字符、数字、句点和"/"符号。除了引用,commands中不能含有"#",也不允许换行。  在通常的情况下命令行参数中只含有一个":",此时command序列通常和makefile文件中某些定义文件间依赖关系的描述行有关。如果与目标相关连的那些描述行指定了相关的command序列,那么就执行这些相关的command命令,即使在分号和(tab)后面的aommand字段甚至有可能是NULL。如果那些与目标相关连的行没有指定command,那么将调用系统默认的目标文件生成规则。  如果命令行参数中含有两个冒号"::",则此时的command序列也许会和makefile中所有描述文件依赖关系的行有关。此时将执行那些与目标相关连的描述行所指向的相关命令。同时还将执行build-in规则。如果在执行command命令时返回了一个非"0"的出错信号,例如makefile文件中出现了错误的目标文件名或者出现了以连字符打头的命令字符串,make操作一般会就此终止,但如果make后带有"-i"参数,则make将忽略此类出错信号。Make命本身可带有四种参数:标志、宏定义、描述文件名和目标文件名。其标准形式为:  Make   Unix系统下标志位flags选项及其含义为:  ◆-f file指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入。如果没有"-f"参数,则系统将默认当前目录下名为 makefile或者名为Makefile的文件为描述文件。在linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。  ◆-i 忽略命令执行返回的出错信息。  ◆-s 沉默模式,在执行之前不输出相应的命令行信息。  ◆-r 禁止使用build-in规则。  ◆-n 非执行模式,输出所有执行命令,但并不执行。  ◆-t 更新目标文件。  ◆-q make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息。  ◆-p 输出所有宏定义和目标文件描述。  ◆-d Debug模式,输出有关文件和检测时间的详细信息。  linux下make标志位的常用选项与Unix系统中稍有不同,下面我们只列出了不同部分:  ◆-c dir 在读取 makefile 之前改变到指定的目录dir。  ◆-I dir 当包含其他 makefile文件时,利用该选项指定搜索目录。  ◆-h help文挡,显示所有的make选项。  ◆-w 在处理 makefile 之前和之后,都显示工作目录。  通过命令行参数中的target ,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。  通常,makefile 中还定义有 clean 目标,可用来清除编译过程中的中间文件,例如:  clean:  rm -f *.o  运行 make clean 时,将执行 rm -f *.o 命令,最终删除所有编译过程中产生的所有中间文件。  隐含规则  在make 工具中包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。Unix系统通常支持一种基于文件扩展名即文件名后缀的隐含规则。这种后缀规则定义了如何将一个具有特定文件名后缀的文件(例如.c文件),转换成为具有另一种文件名后缀的文件(例如.o文件):  .c:.o  $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $《  系统中默认的常用文件扩展名及其含义为:  ◆.o 目标文件  ◆.c C源文件  ◆.f FORTRAN源文件  ◆.s 汇编源文件  ◆.y Yacc-C源语法  ◆.l Lex源语法  在早期的Unix系统系统中还支持Yacc-C源语法和Lex源语法。在编译过程中,系统会首先在makefile文件中寻找与目标文件相关的.C文件,如果还有与之相依赖的.y和.l文件,则首先将其转换为.c文件后再编译生成相应的.o文件;如果没有与目标相关的.c文件而只有相关的.y文件,则系统将直接编译.y文件。  而GNU make 除了支持后缀规则外还支持另一种类型的隐含规则--模式规则。这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 file.c 文件转换为 file.o 文件:  %.c:%.o  $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $《  #EXAMPLE#  下面将给出一个较为全面的示例来对makefile文件和make命令的执行进行进一步的说明,其中make命令不仅涉及到了C源文件还包括了Yacc 语法。本例选自"Unix Programmer’s Manual 7th Edition, Volume 2A" Page 283-284  下面是描述文件的具体内容:  #Description file for the Make command  #Send to print  P=und -3 | opr -r2  #The source files that are needed by object files  FILES= Makefile version.c defs main.c donamc.c misc.c file.c  dosys.c gram.y lex.c gcos.c  #The definitions of object files  OBJECTS= vesion.o main.o donamc.o misc.o file.o dosys.o gram.o  LIBES= -LS  LINT= lnit -p  CFLAGS= -O  make: $(OBJECTS)  cc $(CFLAGS) $(OBJECTS) $(LIBES) -o make  size make  $(OBJECTS): defs  gram.o: lex.c  cleanup:  -rm *.o gram.c  install:  @size make /usr/bin/make  cp make /usr/bin/make ; rm make  #print recently changed files  print: $(FILES)  pr $? | $P  touch print  test:  make -dp | grep -v TIME》1zap  /usr/bin/make -dp | grep -v TIME》2zap  diff 1zap 2zap  rm 1zap 2zap  lint: dosys.c donamc.c file.c main.c misc.c version.c gram.c  $(LINT) dosys.c donamc.c file.c main.c misc.c version.c  gram.c  rm gram.c  arch:  ar uv /sys/source/s2/make.a $(FILES)  通常在描述文件中应象上面一样定义要求输出将要执行的命令。在执行了 linux make命令之后,输出结果为:  $ make  cc -c version.c  cc -c main.c  cc -c donamc.c  cc -c misc.c  cc -c file.c  cc -c dosys.c  yacc gram.y  mv y.tab.c gram.c  cc -c gram.c  cc version.o main.o donamc.o misc.o file.o dosys.o gram.o  -LS -o make  13188+3348+3044=19580b=046174b  最后的数字信息是执行"@size make"命令的输出结果。之所以只有输出结果而没有相应的命令行,是因为"@size make"命令以"@"起始,这个符号禁止打印输出它所在的命令行。  描述文件中的最后几条命令行在维护编译信息方面非常有用。其中"print"命令行的作用是打印输出在执行过上次"make print"命令后所有改动过的文件名称。系统使用一个名为print的0字节文件来确定执行print命令的具体时间,而宏$?则指向那些在print 文件改动过之后进行修改的文件的文件名。如果想要指定执行print命令后,将输出结果送入某个指定的文件,那么就可修改P的宏定义:  make print "P= cat》zap"  在linux中大多数软件提供的是源代码,而不是现成的可执行文件,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用。只有掌握了make工具,才能让我们真正享受到到Linux这个自由软件世界的带给我们无穷乐趣。  以上讲解的是linux make命令和Makefile的区别。

linux里面的make和makefile是做什么的

1、make:是一个非常重要的编译命令,本质上它是一个程序。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。2、Makefile文件 :Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作,本质上makefile文件是个文本文件,用于配置编译过程。makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。3、在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:   $ make -f Makefile.debug  例如,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。即在filea.c和fileb.c里都有这样的声明:  #include "defs"  那么下面的文档就描述了这些文件之间的相互联系:   #It is a example for describing makefile    prog : filea.o fileb.o filec.o    cc filea.o fileb.o filec.o -LS -o prog    filea.o : filea.c a.h defs    cc -c filea.c    fileb.o : fileb.c b.h defs    cc -c fileb.c    filec.o : filec.c c.h    cc -c filec.c  这个描述文档就是一个简单的makefile文件。

make,makefile和脚本之间什么关系makefile是一种脚本吗

这里简单说一下,更多细节可以去找一些深入的材料去了解。make一般主要被用来管理一个软件程序项目(用来完成大型软件的自动编译),但是它不仅仅可以用来管理软件程序,还可以做很多其他的事情,比如文件同步等。makefile是被make使用的“描述”文件,它描述要被make所管理的项目中的文件间的关系(比如对于一个C程序项目来说,.h文件和.c文件之间的关系,.c和.o之间的关系等),和如何维护这个项目的状态(比如对于一个程序项目来说,就有编译可执行文件,产生文档,清除所有除源代码文件之外的文件等).脚本是和make/makefile没有任何关系的,就是一种编程语言,一般都是解释型的编程语言,好处是容易开发,写完就能用,不需要编译,多用于系统维护等。

简述什么是make和makefile(在linux系统应用make命令时,makefile 与makefile有何区别)

本文编辑:admin

更多文章:


Elune是什么意思?elune怎么发音

Elune是什么意思?elune怎么发音

本文目录Elune是什么意思elune怎么发音Elune是什么意思这个跟游戏背景有关系啦这个名字是月亮女神,中文翻译成艾露恩是暗夜精灵的主神,泰兰德·语风是她的女祭司(暗夜精灵首领)我也是魔兽玩家哦(一区库德兰)有什么问题尽管问elune月

2024年7月1日 01:41

王者荣耀体验服官方网站(王者荣耀官方体验服在哪里可以下载)

王者荣耀体验服官方网站(王者荣耀官方体验服在哪里可以下载)

这篇文章给大家聊聊关于王者荣耀体验服官方网站,以及王者荣耀官方体验服在哪里可以下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录王者荣耀官方体验服在哪里可以下载《王者荣耀》体验服申请网址是什么王者荣耀体验服官网是什么王者荣耀

2024年7月20日 09:36

手机如何开通黄钻(如何用手机开通黄钻)

手机如何开通黄钻(如何用手机开通黄钻)

本文目录如何用手机开通黄钻手机如何开通黄钻用手机怎么开通黄钻啊用手机如何开通黄钻如何用手机开通黄钻手机开通QQ黄钻的方法:1、移动手机开通包月黄钻,短信:AM或者30发到10666226,根据短信绑定QQ号即可开通。开通地区:大陆。注意移动

2024年7月3日 20:09

阿里云数据库(阿里云服务器ECSMySQL数据库忘记密码怎么办)

阿里云数据库(阿里云服务器ECSMySQL数据库忘记密码怎么办)

本文目录阿里云服务器ECSMySQL数据库忘记密码怎么办阿里云服务器怎么安装数据库服务器阿里云服务器上的数据库怎么访问如何在阿里云服务器上建立一个数据库云数据库RDS是什么阿里云数据库,跟自己在服务器安装的有什么区别有人说安装很简单,那为什

2024年1月25日 17:00

迷你世界普通下载免费(迷你世界海洋版本怎样下载)

迷你世界普通下载免费(迷你世界海洋版本怎样下载)

今天给各位分享迷你世界海洋版本怎样下载的知识,其中也会对迷你世界海洋版本怎样下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录迷你世界海洋版本怎样下载迷你世界0.23.0版本怎么下载迷你世界0.17怎么下载迷

2024年7月15日 18:50

惠普是哪国的品牌(惠普电脑是哪个国家的品牌)

惠普是哪国的品牌(惠普电脑是哪个国家的品牌)

本文目录惠普电脑是哪个国家的品牌惠普电脑是哪个国家的惠普电脑是哪个国家产的惠普电脑是哪个国家的品牌惠普电脑是美国的品牌。惠普研发有限合伙公司(Hewlett-Packard Development Company, L.P.)(简称HP)(

2024年6月10日 16:16

花生壳域名免费申请(怎样申请域名)

花生壳域名免费申请(怎样申请域名)

各位老铁们好,相信很多人对花生壳域名免费申请都不是特别的了解,因此呢,今天就来为大家分享下关于花生壳域名免费申请以及怎样申请域名的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录怎样申请域名花生壳是干什么用的希网,

2024年6月29日 15:00

免费不要网络游戏大全(有什么游戏是不需要网络也可以玩的)

免费不要网络游戏大全(有什么游戏是不需要网络也可以玩的)

大家好,关于免费不要网络游戏大全很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于有什么游戏是不需要网络也可以玩的的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2024年8月25日 01:00

像ktv一样的k歌软件(网上唱歌的平台都有哪些)

像ktv一样的k歌软件(网上唱歌的平台都有哪些)

大家好,像ktv一样的k歌软件相信很多的网友都不是很明白,包括网上唱歌的平台都有哪些也是一样,不过没有关系,接下来就来为大家分享关于像ktv一样的k歌软件和网上唱歌的平台都有哪些的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开

2024年6月25日 06:30

4399游戏(4399小游戏网址是什么)

4399游戏(4399小游戏网址是什么)

各位老铁们好,相信很多人对4399游戏都不是特别的了解,因此呢,今天就来为大家分享下关于4399游戏以及4399小游戏网址是什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录4399小游戏网址是什么怎么下载43

2024年8月14日 16:01

国家提供的免费网课平台(国家免费课程教育平台是哪两个)

国家提供的免费网课平台(国家免费课程教育平台是哪两个)

各位老铁们,大家好,今天由我来为大家分享国家提供的免费网课平台,以及国家免费课程教育平台是哪两个的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录国家

2024年7月3日 17:33

万能钥匙下载2022新版(万能钥匙下载安装2022最新版咋不能用)

万能钥匙下载2022新版(万能钥匙下载安装2022最新版咋不能用)

本篇文章给大家谈谈万能钥匙下载2022新版,以及万能钥匙下载安装2022最新版咋不能用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录万能钥

2024年7月2日 21:29

申请qq 号(怎样申请QQ号)

申请qq 号(怎样申请QQ号)

今天给各位分享怎样申请QQ号的知识,其中也会对怎样申请QQ号进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录怎样申请QQ号如何申请QQ号如何申请QQ号怎样申请QQ号怎么申请qq号怎么申请qq号怎么申请新的QQ号

2024年4月12日 00:45

在线图片压缩转换器(用什么软件可以批量压缩图片)

在线图片压缩转换器(用什么软件可以批量压缩图片)

大家好,在线图片压缩转换器相信很多的网友都不是很明白,包括用什么软件可以批量压缩图片也是一样,不过没有关系,接下来就来为大家分享关于在线图片压缩转换器和用什么软件可以批量压缩图片的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开

2024年5月16日 16:15

魔兽世界挂机脚本(魔兽脚本为啥不封号)

魔兽世界挂机脚本(魔兽脚本为啥不封号)

本文目录魔兽脚本为啥不封号魔兽世界战场里面如何看出别人使用挂机脚本按键精灵魔兽世界挂机脚本是什么按键精灵魔兽世界挂机脚本(支持双开)魔兽世界开脚本会被封Ip吗请问按键精灵能做脚本自动挂魔兽世界战场么魔兽脚本为啥不封号其实魔兽世界并不是不封脚

2024年5月2日 03:48

幻想三国志3修改器(幻想三国志3物品修改器)

幻想三国志3修改器(幻想三国志3物品修改器)

本文目录幻想三国志3物品修改器幻想三国志3中为什么我的装备总是损坏幻想三国志3绿灵石问题幻想三国志3修改器幻想三国志3怎么改物品幻想三国志3物品修改器幻三3的物品可以用自带秘技去改,不必修改器。在主界面下,同时按alt+q+y+p四个键,能

2023年5月28日 23:20

变声器软件吃鸡(和平精英怎么下载变声器)

变声器软件吃鸡(和平精英怎么下载变声器)

大家好,关于变声器软件吃鸡很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于和平精英怎么下载变声器的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录和平精英

2024年6月28日 01:04

三国杀online网页版(三国杀online网页版如何登陆)

三国杀online网页版(三国杀online网页版如何登陆)

本文目录三国杀online网页版如何登陆三国杀网页版和三国杀online的区别三国杀online网页版如何登陆是盛大的么,先去申请盛大账号,然后进入三国杀online游戏界面,选择你说想要进的区,创建角色,还有登录时输入账号(邮箱),密码,

2024年6月6日 13:40

lol手游官网(LOL英雄联盟手游官网可以下载了吗)

lol手游官网(LOL英雄联盟手游官网可以下载了吗)

各位老铁们好,相信很多人对lol手游官网都不是特别的了解,因此呢,今天就来为大家分享下关于lol手游官网以及LOL英雄联盟手游官网可以下载了吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录LOL英雄联盟手游官网

2024年8月27日 11:35

新手怎么从1688拿货(在淘宝开店,怎样从1688进货)

新手怎么从1688拿货(在淘宝开店,怎样从1688进货)

这篇文章给大家聊聊关于新手怎么从1688拿货,以及在淘宝开店,怎样从1688进货对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录在淘宝开店,怎样从1688进货在阿里巴巴网站怎样进货新手怎样在1688进货 得做好这四点新手怎么从

2024年9月4日 06:45

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索