makefilemakefile怎样使用?

makefile  时间:2021-07-23  阅读:()

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

1、make:是一个非常重要的编译命令,本质上它是一个程序。

利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。

而且如此多的源文件,如果每次都要键入命令进行编译的话,那对程序员来说简直就是一场灾难。

而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    filea.o fileb.o filec.o -LS -o prog    filea.o : filea.c a.h defs    -c filea.c    fileb.o : fileb.c b.h defs    -c fileb.c    filec.o : filec.c c.h    -c filec.c   这个描述文档就是一个简单的makefile文件。

c语言,怎么写makefile

编译 -c # makefile CC= CFLAGS=-c -Wall -Werror all: tilesBFS tilesBFS: tilesBFS.o boardADT.o quackADT.o $(CC) tilesBFS.o boardADT.o quackADT.o -o tilesBFS tilesBFS.o: tilesBFS.c $(CC) $(CFLAGS) tilesBFS.c boardADT.o: boardADT.c $(CC) $(CFLAGS) boardADT.c quackADT.o: quackADT.c $(CC) $(CFLAGS) quackADT.c

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

分析linux make命令与Makefile的区别: 1、make命令有一些内置的默认功能,但是光有7a686964616fe58685e5aeb931333339653731这个还是不知道怎么build程序。

必须提供一个文件告诉make应用程序的构造,这个文件就是makefile。

2、Make和makefile提供了强大的功能来管理项目的编译以及发布install到指定文件夹。

3、make的原理是执行一个叫Makefile文件里的指令,make的基本用处是自动根据makefile里的指令来编译源文件。

还可以用来做比如安装软件,卸载软件等事情,但前提是在makefile里写了。

4、比如makefile里有这么些内容: install : <mands > 然后用make install的话,make程序就会按照上面install:后面的指令<mands >执行安装,uninstall也是一样的道理,大部分的作者会写有卸载的部分,这时只要简单地执行make unistall就可以,如果作者懒没有写,那就只有根据make install中的步骤,把什么文件拷到哪去了,然后分别手动删除。

还有关键的一点是,编译安装完成后,不要删除源代码,不然就算作者写了unnistall目标,也没有makefile可以执行了。

makefile文件的作用是什么?

makefile(.mak)的作用是命令行编译连接命令nmake使用的文件。

它以文本的方式规定了nmake要编译那些文件,生成那些文件,要连接那些文件,生成的.exe文件的名称等,也支持增量编译。

它有自己的一套语法。

可参见msdn,搜索make files就可以了。

如何自己编写Makefile

简单的说,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至可以在makefile中执行shell脚本。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  关于程序的编译和链接   一般来说,无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译pile),一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。

然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

  编译时,编译器需要的是语法的正确,函数与变量的声明的正确。

对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

  链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。

链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大...  简单的说,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至可以在makefile中执行shell脚本。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  关于程序的编译和链接   一般来说,无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译pile),一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。

然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

  编译时,编译器需要的是语法的正确,函数与变量的声明的正确。

对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

  链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。

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

  下面我们开始看看如何自己写出makefile。

  Makefile的规则   目标 : 需要的条件 (注意冒号两边有空格)   命令  (注意前面用tab键开头)   解释一下:   1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是一个标签。

  2 需要的条件就是生成目标所需要的文件或目标   3 命令就是生成目标所需要执行的脚本   总结一下,就是说一条makefile规则规定了编译的依赖关系,也就是目标文件依赖于条件,生成规则用命令来描述。

在编译时,如果需要的条件的文件比目标更新的话,就会执行生成命令来更新目标。

  下面举个简单的例子说明。

如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。

  edit : main.o mand.o display.o /   insert.o search.o files.o utils.o   -o edit main.o mand.o display.o /   insert.o search.o files.o utils.o   main.o : main.c defs.h   -c main.c   kbd.o : kbd.c mand.h   -c kbd.c  mand.o :mand.c mand.h   mand.c   display.o : display.c defs.h buffer.h   -c display.c   insert.o : insert.c defs.h buffer.h   -c insert.c   search.o : search.c defs.h buffer.h   -c search.c   files.o : files.c defs.h mand.h   -c files.c   utils.o : utils.c defs.h   -c utils.c   clean :   rm edit main.o mand.o display.o /   insert.o search.o files.o utils.o   将上面的内容写入到Makefile文件中,然后执行make就可以进行编译,执行make clean就可以删除所有目标文件。

解释一下,也就是说生成最终的目标文件edit,依赖于一系列的.o目标文件,而这些.o文件又是需要用源文件来编译生成的。

  需要注意的是,clean后面没有条件,而clean本身也不是文件,它只不过是一个动作名字,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。

  make是如何工作的   在默认的方式下,也就是我们只输入make命令。

那么,   1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

  2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。

  3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。

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

(这有点像一个堆栈的过程)   5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

  makefile中使用变量   前面的知识已经足以让你自己完成一个简单的makefile了,不过makefile的精妙之处远不止如此,下面来看看如何在makefile中使用变量吧。

  在上面的例子中,先让我们看看edit的规则:   edit : main.o mand.o display.o /   insert.o search.o files.o utils.o   -o edit main.o mand.o display.o /   insert.o search.o files.o utils.o   我们可以看到[.o]文件的字符串被重复了两次,如果我们的工程需要加入一个新的[.o]文件,那么我们需要在两个地方加(应该是三个地方,还有一个地方在clean中)。

当然,我们的makefile并不复杂,所以在两个地方加也不累,但如果 makefile变得复杂,那么我们就有可能会忘掉一个需要加入的地方,而导致编译失败。

所以,为了makefile的易维护,在makefile中我们可以使用变量。

makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。

  于是,我们使用变量objects   objects = main.o mand.o display.o /   insert.o search.o files.o utils.o   这样一来,原来的makefile变成如下的样子:   objects = main.o mand.o display.o /   insert.o search.o files.o utils.o   edit : $(objects)   -o edit $(objects)   main.o : main.c defs.h   -c main.c   kbd.o : kbd.c mand.h   -c kbd.c  mand.o :mand.c mand.h   mand.c   display.o : display.c defs.h buffer.h   -c display.c   insert.o : insert.c defs.h buffer.h   -c insert.c   search.o : search.c defs.h buffer.h   -c search.c   files.o : files.c defs.h mand.h   -c files.c   utils.o : utils.c defs.h   -c utils.c   clean :   rm edit $(objects)   这样看起来方便多了吧,也更加省事了。

如果有新的.o文件怎么办?当然是在objects里面添加了,这样只需要一处改变,很方便吧。

  让make自动推导   GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

  只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。

并且 -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。

我们的是新的makefile又出炉了。

  objects = main.o mand.o display.o /   insert.o search.o files.o utils.o   edit : $(objects)   -o edit $(objects)   main.o : defs.h   kbd.o : mand.h  mand.o : mand.h   display.o : defs.h buffer.h   insert.o : defs.h buffer.h   search.o : defs.h buffer.h   files.o : defs.h mand.h   utils.o : defs.h   clean :   rm edit $(objects)   当然,如果你觉得那么多[.o]和[.h]的依赖有点不爽的话,好吧,没有问题,这个对于make来说很容易,谁叫它提供了自动推导命令和文件的功能呢?来看看最新风格的makefile吧。

  objects = main.o mand.o display.o /   insert.o search.o files.o utils.o   edit : $(objects)   -o edit $(objects)   $(objects) : defs.h   mand.o files.o :mand.h   display.o insert.o search.o files.o : buffer.h   clean :   rm edit $(objects)   不过话说回来,本人并不推荐这种方法。

虽然简单,但是这种方法破坏了文件本身的依赖关系。

如果文件过多的话,可能你自己都不清楚了。

  怎么样,makefile是不是既简单又强大?

makefile怎样使用?

用 命令: make -f <你的makefile的具体的名字> 再拍 Enter 键。

你可以起不同的文件名,例如 mkfile1, mkfile2 make -f mkfile1 make -f mkfile2 文件名 可带路径。

HostYun 新上美国CN2 GIA VPS 月15元

HostYun 商家以前是玩具主机商,这两年好像发展还挺迅速的,有点在要做点事情的味道。在前面也有多次介绍到HostYun商家新增的多款机房方案,价格相对还是比较便宜的。到目前为止,我们可以看到商家提供的VPS主机包括KVM和XEN架构,数据中心可选日本、韩国、香港和美国的多个地区机房,电信双程CN2 GIA线路,香港和日本机房,均为国内直连线路。近期,HostYun上线低价版美国CN2 GIA ...

ZJI(月付450元),香港华为云线路服务器、E3服务器起

ZJI发布了9月份促销信息,针对香港华为云线路物理服务器华为一型提供立减300元优惠码,优惠后香港华为一型月付仅450元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月更名为ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务,商家所选数据中心均为国内访问质量高的机房和线路,比如香港阿里云、华为...

弘速云20.8元/月 ,香港云服务器 2核 1g 10M

弘速云元旦活动本公司所销售的弹性云服务器、虚拟专用服务器(VPS)、虚拟主机等涉及网站接入服务的云产品由具备相关资质的第三方合作服务商提供官方网站:https://www.hosuyun.com公司名:弘速科技有限公司香港沙田直营机房采用CTGNET高速回国线路弹性款8折起优惠码:hosu1-1 测试ip:69.165.77.50​地区CPU内存硬盘带宽价格购买地址香港沙田2-8核1-16G20-...

makefile为你推荐
android打包签名如何查看Android应用程序签名打包信息发博客什么是发博文java学习思维导图思维导图培训教程?思维导图软件MindManager,freemind,xmind哪个好?垃圾文件清理bat一键清理系统垃圾文件.bat 的原理圣诞节网页制作圣诞节贺卡制作微信语音在哪个文件夹微信语音保存在手机那个文件夹里创业好项目论坛1000元创业有什么好项目可以做?智能公共广播系统智能广播系统怎么实现?linux操作系统好吗Linux操作系统和WINDOWS7操作系统哪个好腾讯汽车论坛如何推广一个小城市的汽车论坛
上海域名注册 pw域名 香港托管 payoneer 免费网站监控 windows2003iso 国外免费空间 大容量存储器 银盘服务 东莞主机托管 西安主机 789电视剧网 国外免费网盘 apache启动失败 ping值 web服务器有哪些 cloudflare 次世代主机 广州服务器数据恢复 百度空间登陆首页 更多