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 文件名 可带路径。

BeerVM1GB内存/VDSps端口1GB,350元/月

beervm是一家国人商家,主要提供国内KVM VPS,有河南移动、广州移动等。现在预售湖南长沙联通vds,性价比高。湖南长沙vps(长沙vds),1GB内存/7GB SSD空间/10TB流量/1Gbps端口/独立IP/KVM,350元/月,有需要的可以关注一下。Beervm长沙联通vps套餐:长沙联通1G青春版(预售)长沙联通3G标准版(预售)长沙联通3G(预售)vCPU:1vCPU:2vCPU...

Virmach:1核/512M1核M1核512M/夏季美国vps促销,年付$7.2,9月更换AMD平台

virmach怎么样?virmach家这几年非常火,从商家的黑五闪购开始,以超低的价格吸引了大批的国人客户,而且商家的机器还是非常稳定的,站长手里的4.75刀年付已经用了两年了,非常稳定,不过商家到国内的线路一般,目前商家新上了夏季优惠促销,价格低到发指,年付7.2美元起,商家反馈将在9月开始更换AMD+NVMe平台,这个消息从年初就有了,不过一直没有更换,目前这个时间也不确定是否准确。点击进入:...

hostkey荷兰/俄罗斯机房,GPU服务器

hostkey应该不用说大家都是比较熟悉的荷兰服务器品牌商家,主打荷兰、俄罗斯机房的独立服务器,包括常规服务器、AMD和Intel I9高频服务器、GPU服务器、高防服务器;当然,美国服务器也有,在纽约机房!官方网站:https://hostkey.com/gpu-dedicated-servers/比特币、信用卡、PayPal、支付宝、webmoney都可以付款!CPU类型AMD Ryzen9 ...

makefile为你推荐
发博客怎么发博客?多重阴影[讨论]《多重阴影》的中文配音好熟悉啊!magento2MRP与MRP2的区别呼叫中心搭建如何建立适合自己的呼叫中心客服系统方案客户服务系统的设计与实现的开题报告创业好项目论坛现在挣钱太难了、大家有什么好项目微软永久关闭实体店微软有一天倒闭了 你会怎样?发送验证码怎样向好友发微信验证码软件测试工程师待遇软件测试工程师发展前景怎么样,福利待遇好吗?cad图批量打印怎样一次性打印CAD所有布局里面的图
域名查询工具 老左 电信测速器 20g硬盘 网站监控 debian7 e蜗牛 智能骨干网 e蜗 双拼域名 赞助 鲁诺 登陆空间 iki 阿里dns 国内空间 存储服务器 hosting24 架设代理服务器 百度新闻源申请 更多