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

1核1G仅38元/月起野草云服务器,香港/美国洛杉矶CN2+BGP云服务器,

野草云服务器怎么样?野草云是一家成立了9年的国人主机商家,隶属于香港 LucidaCloud Limited (HongKong Registration No. 2736053 / 香港網上查冊中心)。目前,野草云主要销售香港、美国的VPS、虚拟主机及独立服务器等产品,本站也给大家分享过多次他家的优惠了,目前商家开启了优惠活动,香港/美国洛杉矶CN2+BGP云服务器,1核1G仅38元/月起!点击...

舍利云30元/月起;美国CERA云服务器,原生ip,低至28元/月起

目前舍利云服务器的主要特色是适合seo和建站,性价比方面非常不错,舍利云的产品以BGP线路速度优质稳定而著称,对于产品的线路和带宽有着极其严格的讲究,这主要表现在其对母鸡的超售有严格的管控,与此同时舍利云也尽心尽力为用户提供完美服务。目前,香港cn2云服务器,5M/10M带宽,价格低至30元/月,可试用1天;;美国cera云服务器,原生ip,低至28元/月起。一、香港CN2云服务器香港CN2精品线...

老薛主机入门建站月付34/月,年付345元,半价香港VPS主机

老薛主机怎么样?老薛主机这个商家有存在有一些年头。如果没有记错的话,早年老薛主机是做虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站业务所以能持续到现在。这不,站长看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港vps主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港vps。点击进入...

makefile为你推荐
mobilepartnermobile partner拔不上号,信号60%,连不上网络,老是提示连接被中止dreamweaver8激活码求Dreamweaver 8激活码发博客什么是发博文安卓系统软件删除安卓系统中如何删除无用程序?印象城市游戏论坛宙斯众神之王下的地图为什么没有?人脸检测综述人脸检测技术的研究现状handoff怎么用如何令Yosemite使用iPhone的通话功能和Handoff设置nero教程如何使用NERO刻碟操控人心怎样帮助别人让别人觉得欠我人情?oa系统包含哪些模块求问OA办公系统的组成模块能分为哪三个类别?
域名主机空间 宿迁服务器租用 vps论坛 krypt enzu kvmla 便宜域名 vmsnap3 网站保姆 网站实时监控 100x100头像 中国电信测速112 空间论坛 搜索引擎提交入口 33456 多线空间 drupal安装 raid10 腾讯总部在哪 photobucket 更多