ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:26.58KB ,
资源ID:17874457      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17874457.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(makefile隐晦规则范文模板 29页Word格式文档下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

makefile隐晦规则范文模板 29页Word格式文档下载.docx

1、说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容 .PHONY : clean ,“.PHONY”表示,clean是个伪目标文件。一般的风格都是:clean:rm edit $(objects)更为稳健的做法是: cleanclean :-rm edit $(objects)前面说过,.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。Makefile里主要包含

2、了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。3、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。4、文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就

3、像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。5、注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C+中的“/”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“#”。最后,还值得一提的是,在Makefile中的命令,必须要以Tab键开始。默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”

4、的文件,你可以使用别的文件名来书写Makefile,比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“-file”参数,如:make -f Make.Linux或make -file Make.AIX。引用其它的Makefile在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。include的语法是:include filename可以是当前操作系统Shell的文件模式(可以保含路径和通

5、配符)在include前面可以有一些空字符,但是绝不能是Tab键开始。include和可以用一个或多个空格隔开。举个例子,你有这样几个Makefile:a.mk、b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了e.mk和f.mk,那么,下面的语句:include foo.make *.mk $(bar)等价于:include foo.make a.mk b.mk c.mk e.mk f.mkmake命令开始时,会把找寻include所指出的其它Makefile,并把其内容安置在当前的位置。就好像C/C+的#include指令一样。如果文件都没有指定绝对路径

6、或是相对路径的话,make会在当前目录下首先寻找,如果当前目录下没有找到,那么,make还会在下面的几个目录下找:1、如果make执行时,有“-I”或“-include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。2、如果目录/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。如果你想让make不

7、理那些无法读取的文件,而继续执行,你可以在include前加一个减号“-”。如:-include 其表示,无论include过程中出现什么错误,都不要报错继续执行。和其它版本make兼容的相关命令是sinclude,其作用和这一个是一样的。GNU的make工作时的执行步骤入下:(想来其它的make也是类似)1、读入所有的Makefile。2、读入被include的其它Makefile。3、初始化文件中的变量。4、推导隐晦规则,并分析所有规则。5、为所有的目标文件创建依赖关系链。6、根据依赖关系,决定哪些目标要重新生成。7、执行生成命令。make支持三各通配符:“*”,“?”和“.”。波浪号(“

8、”)字符在文件名中也有比较特殊的用途。如果是“/test”,这就表示当前用户的$HOME目录下的test目录。而“hchen/test”则表示用户hchen的宿主目录下的test目录。(这些都是Unix下的小知识了,make也支持)而在Windows或是MS-DOS下,用户没 有宿主目录,那么波浪号所指的目录则根据环境变量“HOME”而定。通配符代替了你一系列的文件,如“*.c”表示所以后缀为c的文件。一个需要我们注意的是,如果我们的文件名中有通配符,如:“*”,那么可以用转义字符“”,如“*”来表示真实的“*”字符,而不是任意长度的字符串。文件搜寻在一些大的工程中,有大量的源文件,我们通常的

9、做法是把这许多的源文件分类,并存放在不同的目录中。所以,当make需要去找寻文件的依赖关系时,你可以在文件前加上路径,但最好的方法是把一个路径告诉make,让make在自动去找。Makefile文件中的特殊变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。VPATH = src:./headers上面的的定义指定两个目录,“src”和“./headers”,make会按照这个顺序进行搜索。目录由“冒号”分隔。(当然,当前目录永远是最高优先

10、搜索的地方)另一个设置文件搜索路径的方法是使用make的“vpath”关键字(注意,它是全小写的),这不是变量,这是一个make的关键字,这和上面提到的那个VPATH变量很类似,但是它更为灵活。它可以指定不同的文件在不同的搜索目录中。这是一个很灵活的功能。它的使用方法有三种:1、vpath 为符合模式的文件指定搜索目录。2、vpath 清除符合模式的文件的搜索目录。3、vpath清除所有已被设置好了的文件搜索目录。vapth使用方法中的需要包含“%”字符。“%”的意思是匹配零或若干字符,例如,“%.h”表示所有以“.h”结尾的文件。指定了要搜索的文件集,而则指定了的文件集的搜索的目录。例如:v

11、path %.h ./headers该语句表示,要求make在“./headers”目录下搜索所有以“.h”结尾的文件。(如果某文件在当前目录没有找到的话)我们可以连续地使用vpath语句,以指定不同搜索策略。如果连续的vpath语句中出现了相同的,或是被重复了的,那么,make会按照vpath语句的先后顺序来执行搜索。vpath %.c foovpath %blishvpath %.c bar其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录。vpath %.c foo:bar而上面的语句则表示“.c”结尾的文件,先在“foo”目录,然后是“bar”目录

12、,最后才是“blish”目录。为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“make clean”这样。于是整个过程可以这样写:.PHONY:rm *.o temp篇二:makefile基础实例讲解Makefile基础实例讲解一、makefile简介定义:makefile定义了软件开发过程中,项目工程编译链、接接的方法和规则。 产生:由IDE自动生成或者开发者手动书写。作用:Unix(MAC O

13、S、Solars)和Linux(Red Hat、Ubuntu)系统下由make命令调用当前目录下的makefile文件执行,可实现项目工程的自动化编译。二、语法规则target:prerequisites其中,target为需要生成的目标,prerequisites为依赖项,command为make需要执行的命令(任意的Shell命令)。注意:其中command前必须以tab键开始。三、makefile内容1显式规则。2隐晦规则。3变量的定义。4文件指示。有关这一部分的内容,请参考文末的参考资料。5注释。四、make的工作流程在默认的方式下,也就是我们只输入make命令,则相当于make fi

14、rst_objname_in_makefile。意思是生成出现在makefile中第一个目标文件。或者指明生成的目标名称,如make objname。按默认方式,输入make命令,其工作方式是:1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2.如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,并把这个文件作为最终的目标文件。3.如果target不存在,则根据target后的依赖项和command生成target。如果target已存在,则make检测target依赖项是否有修改,若修改,则跟新target。四、实例讲解鄙人将以实际

15、工作项目的makefile为例为大家讲解makefile的创建过程。Makefile内容如下:CCFILES += $(wildcard src/*.cpp)SRCDIR := ./src/./include:./src/xmlparser:./lib# Compilers#CC:= /opt/intel/composer_xe_201X.0.079/bin/intel64/icpcCC := icpc# Compilers paraFLAGS := -openmp -openmp-report -vec-report -O2OBJECT :=file_interface.o tinyxml2

16、.o mic_decomposer.o Charset.o network.o buffer.o task_queue.o common.o main.o mic_function.o hashtree.o nodeconfig.o md5_mic.o ntlm_mic.oALG.out : $(OBJECT)(来自: : makefile隐晦规则 ) $(CC) $(FLAGS) -o ALG.out $(OBJECT) ./lib/libxmlextern.afile_interface.o :global.h tinyxml2.h file_interface.h $(SRCDIR)fi

17、le_interface.cpp$(CC) $(FLAGS) -c $(SRCDIR)file_interface.cpptinyxml2.o :tinyxml2.h $(SRCDIR)tinyxml2.cpp$(CC) $(FLAGS) -c $(SRCDIR)tinyxml2.cppmic_decomposer.o :$(SRCDIR)mic_decomposer.cpp mic_decomposer.h mic_define.h ce.h common.h hashtree.h$(CC) $(FLAGS) -c $(SRCDIR)mic_decomposer.cppCharset.o :

18、Charset.h ce.h $(SRCDIR)Charset.cpp$(CC) $(FLAGS) -c $(SRCDIR)Charset.cppnetwork.o :network.h task_queue.h network_packet.h nodeconfig.h $(SRCDIR)network.cpp $(CC) $(FLAGS) -c $(SRCDIR)network.cppbuffer.o :network.h task_queue.h network_packet.h nodeconfig.h buffer.h $(SRCDIR)buffer.cpp $(CC) $(FLAG

19、S) -c $(SRCDIR)buffer.cpptask_queue.o :task_queue.h $(SRCDIR)task_queue.cpp$(CC) $(FLAGS) -c $(SRCDIR)task_queue.cppcommon.o :common.h mic_define.h mic_function.h $(SRCDIR)common.cpp$(CC) $(FLAGS) -c $(SRCDIR)common.cppmain.o :task_queue.h global.h network.h network_packet.h common.h nodeconfig.h mi

20、c_define.h mic_function.h file_interface.h $(SRCDIR)main.cpp$(CC) $(FLAGS) -c $(SRCDIR)main.cppmic_function.o :mic_function.h $(SRCDIR)mic_function.cpp$(CC) $(FLAGS) -c $(SRCDIR)mic_function.cpphashtree.o :hashtree.h $(SRCDIR)hashtree.cpp$(CC) $(FLAGS) -c $(SRCDIR)hashtree.cppnodeconfig.o :nodeconfi

21、g.h ./src/xmlparser/tinyxml.h $(SRCDIR)nodeconfig.cpp$(CC) $(FLAGS) -c $(SRCDIR)nodeconfig.cppmd5_mic.o :simd.h mic_define.h common.h share_macro.h md5_macro.h md5_mic.h file_interface.h $(SRCDIR)md5_mic.cpp$(CC) $(FLAGS) -c $(SRCDIR)md5_mic.cppntlm_mic.o :simd.h mic_define.h common.h share_macro.h

22、ntlm_macro.h ntlm_mic.h$(CC) $(FLAGS) -c $(SRCDIR)sha256_mic.cpp.PHONY clean:rm -f *.o *.out具体讲解:1. CCFILES += $(wildcard src/*.cpp)利用wildcard函数获取src目录下所有.cpp文件,并赋值给自定义变量CCFILES。2. SRCDIR:用于指明.cpp源文件所在目录。SRCDIR变量在command中出现时,以类似于宏替换的方式将其载入command中。3. VPATH= src:指明makefile寻找依赖项时,若当前目录不存在,则去VPATH指明的目录

23、去寻找。各目录以“:”号隔开。4. CC := icpc,自定义变量CC指明为icpc,表示使用Intel c+ Compiler编译项目。5. FLAGS := -openmp -openmp-report -vec-report -O2,指明编译选项。6. OBJECT :=file_interface.o tinyxml2.o mic_decomposer.o Charset.o network.o buffer.o task_queue.o common.o main.o mic_function.o hashtree.o nodeconfig.o md5_mic.o ntlm_mic

24、.o指明目标文件;其中反斜杠表示一行还未结束。7. ALG.out :此处表示makefile需要生成的第一个目标文件,也是不指明目标文件的make命令默认生成的目标文件。加入icpc的编译选项,并指明目标ALG.out依赖的目标文件和静态链接库项./lib/libxmlextern.a后,进行链接生成可执行文件ALG.out。8. file_interface.o :指明file_interface.o的依赖项并编译成二进制文件file_interface.o。后面的每个目标文件皆是如此做法。9. .PHONY clean:使用.PHONY关键字,指明clean是伪目标,仅作标签使用。此处不依赖与任何项,使用方法是显示调用make clean,用于执行rm操作。但也可以添加依赖项,如:all : prog1 prog2 prog3 all则all依赖于ALG.out,那么使用 make all则可以生成三个目标文件prog1、prog2和prog3。 若将all放在所有目标文件的前面,则使用make即可,无需指明make all,原因是make命令将makefile中第一个出现的目标作为最终目标,若不放在最前面,则必须指明make all。注意事项:1. makefile赋值符号= := += ?=的区别= 是最基本的赋值,以makefile中最后赋值

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1