makefile增量编译.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
makefile增量编译

makefile增量编译 linux编程基础——Makefile 如何通过gcc编译代码生成文件,当项目较多的时候,往往则需要一个自动化的编译工具辅助我们完成这项操作。像Windows那样通过Ctrl+F5即可一键完成项目所有编译工作。 Makefile语法基础 在Linux下,自动化编译工具是通过make命令来完成的(一些工具厂商也提供了它们自己的make命令,如gmake等),make命令的基本格式如下: make [-f makefile] [label] 它可以通过-f参数指定输入文件,当省略-f参数时,默认输入文件名为Makefile,由于我们通常不用这个-f参数,往往就用默认的Makefile文件名。 Makefile是一个文本文件,它是基于一定的语法规则的,它的基本执行规则定义如下: target : [prerequisites] command target 标签,用于标志当前构建的规则,它也可以是文件。 prerequisites 依赖项,在构建该标签的时候先执行的规则 command make需要执行的命令。(任意的Shell命令) 注意:Makefile的target是顶格写的,而Command需要加一个Tab键。我这里为了排版看起来舒服点,每一行都多加了一个Tab键,如果要使用本文的Makefile示例,请去掉各行的第一个Tab键,否则make的时候报错。 例如,我们编写一个简单的Makefile: clean: @echo clean all: @echo all 当我们直接执行make命令的时候,输出如下: tianfang make clean tianfang make all all tianfang make clean clean 从中我们可以看到:默认情况下构建第一个标签。可以通过在命令行参数中通过参数构建指定标签。 然后我们再来看看依赖性是如何工作的,这次我们修改一下Makefile,让all标签依赖于clean标签: clean : @echo clean all : clean @echo all 再次执行make all的时候,发现会先执行clean标签: tianfang make all clean all 用Makefile来构建项目 通过对Makefile的语法有一个简单的了解后,下面就可以用Makefile简化我们的构建操作了。还是针对前面的那个stack的例子吧,首先我们来实现一个最简单的例子: all : gcc -o run main.c stack.c 这样直接通过make命令就可以实现对gcc -o run main.c stack.c整条命令的执行了。 更加一步,我们想实现增量编译,则要实现如下规则: 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。 这个时候就需要前面的依赖性出马了: run : stack.o main.o gcc -o run main.o stack.o stack.o : stack.c gcc -c stack.c main.o : main.c gcc -c main.c 这里的target都是文件,run默认依赖于stack.o和main.o,因此,当构建run的时候,就会先构建stack.o和main.o,输出方式如下: tianfang make gcc -c stack.c gcc -c main.c gcc -o run main.o stack.o 当我们只改了其中某个文件的时候,例如stack.c,这是由于main.c没有变化,因此不会重新编译main.o,只会重新构建stack.o和run,从而实现我们的增量编译的目的。(这个其实才是make比shell或脚本语言编写的批处理方式要强大的地方) tianfang make gcc -c stack.c gcc -o run main.o stack.o 通过自动推导改进Makefile 通过上面的例子可以看到,虽然我们可以实现增量编译,但是整个Makefile过程是非常复杂的,需要对每个.o文件编写编译脚本。如果项目文件较多,并且有增删的话,则编写Makefile文件非常麻烦。 为了改进这个问题,makef

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档