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

georgedatacenter39美元/月$20/年/洛杉矶独立服务器美国VPS/可选洛杉矶/芝加哥/纽约/达拉斯机房/

georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,georgedatacenter是一家成立于2019年的美国VPS商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacenter的VPS采用KVM和VMware虚拟化,可以选择windows...

PIGYUN:美国联通CUVIPCUVIP限时cuvip、AS9929、GIA/韩国CN2机房限时六折

pigyun怎么样?PIGYunData成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,目前商家提供香港CN2线路、韩国cn2线路、美西CUVIP-9929、GIA等线路优质VPS,基于KVM虚拟架构,商家采用魔方云平台,所有的配置都可以弹性选择,目前商家推出了七月优惠,韩国和美国所有线路都有相应的促销,六折至八折,性价比不错。点击进入:PIGYun官方网站地址PIGYUN优惠...

LOCVPS新上韩国KVM,全场8折,2G内存套餐月付44元起_网络传真服务器

LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...

makefile为你推荐
android游戏开发教程android游戏开发教程 哪里短时间学会?淘气鸟八哥鸟忽然死了?淘气鸟乌儿很淘气,飞来飞去,蹦蹦跳跳,请你用“一会儿…一会儿…一会儿…”写写鸟儿?淘气鸟淘气鸟论坛为什么打不开了magento模板magento1.9主题开发用哪个模板为基础好?百度创业史百度的创始人是谁物联卡官网物联卡,是什么卡啊???云图好看吗云图好看么?99客服软件下载99客服软件不兼容 win8慕课网址如何加入慕课学习课程?
二级域名申请 vultr美国与日本 60g硬盘 密码泄露 搜狗抢票助手 一点优惠网 网通ip 湖南服务器托管 本网站服务器在美国 中国电信测速网 申请网页 上海联通宽带测速 银盘服务是什么 江苏双线服务器 华为k3 沈阳idc 酷锐 美国主机侦探 windowsserver2008r2 web是什么意思 更多