chap 1 Linux操作系统基础.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用GNU make管理项目 GNU make是一种代码维护工具,在使用GNU编译器开发大型应用时,往往要使用make管理项目。 如果不使用make管理项目,就必须重复使用多个复杂的命令行维护项目和生成目标代码。 Make通过将命令行保存到makefile中简化了编译工作。 Make的主要任务是根据makefile中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和代码生成工作。 使用GNU make管理项目 Make可以识别出makefile中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率 Make会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则make就执行makefile文件中描述的相应命令,以便更新目的文件 只更新那些需要更新的文件,而不重新处理那些并不过时的文件 使用GNU make管理项目 特点 适合于支持多文件构成的大中型软件项目的编译,链接,清除中间文件等管理工作 提供和识别多种默认规则,方便对大型软件项目的管理 支持对多目录的软件项目进行递归管理 对软件项目具有很好的可维护性和扩展性 Makefile Makefile告诉make该做什么、怎么做 Makefile主要定义了 依赖关系 即有关哪些文件的最新版本是依赖于哪些别的文件产生或者组成的 需要用什么命令来产生目标文件的最新版本 以及一些其他的功能 Makefile的规则 规则内容 要创建的目标(文件) 创建目标(文件)所依赖的文件列表 通过依赖文件创建目标文件的命令组 规则一般形式 target ... : prerequisites ... tabcommand tab... tab... 例如 test:test.c gcc –O –o test test.c 一个简单的Makefile Make的工作过程 default goal 在缺省的情况下,make从makefile中的第一个目标开始执行 Make的工作过程类似一次深度优先遍历过程 Makefile举例 Makefile举例 规则说明 默认依赖规则说明 .o依赖于相应的.c文件 Makefile中的变量 使用变量可以 降低错误风险 简化Makefile 例:objects变量($(objects)) objects = main.o kbd.o command.o \ display.o insert.o search.o files.o utils.o edit: $(objects) cc -o edit $(objects) 有点像环境变量 环境变量在make 过程中被解释成make的变量 可以被用来 贮存一个文件名列表 贮存可执行文件名。如用变量代替编译器名 贮存编译器FLAG 预定义变量 Make使用了许多预定义的变量,如 AR:归档维护程序的名称,默认值为 ar ARFLAGS:归档维护程序的选项 AS:汇编程序的名称,默认值为 as ASFLAGS:汇编程序的选项 CC:C 编译器的名称,默认值为 cc CFLAGS:C 编译器的选项 CXX:C++ 编译器的名称,默认值为 g++ CPPFLAGS:C 预编译的选项 …… 简化后的Makefile文件 内部变量 $@:目标文件的完整名称。 $*:不包含扩展名的目标文件名称。 $:依赖列表中的第一个依赖文件。 $+:所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。 $^:整个依赖列表(除去所有重复的文件名)。 $? :所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。 $%:如果目标是归档成员,则该变量表示目标的归档成员名称。 例如,如果目标名称 为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。不需要括号括住 例如: CC = gcc CFLAGS = -Wall -O -g foo.o : foo.c foo.h bar.h ??$(CC) $(CFLAGS) -c $ -o $@ 隐含规则 (Implicit Rules) 内置的规则 告诉make当没有给出某些命令的时候,应该怎么办。 用户可以使用预定义的变量改变隐含规则的工作方式,如 一个C编译的具体命令将会是: $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $ -o $@ 设定目标(Phony Targets) 设定目标 目标不是一个文件 其目的是为了让一些命令得以执行 使用PHONY显式声明设定目标 .PHONY: clean 使用设定目标实现多个目的 all: prog1 pro

文档评论(0)

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

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

1亿VIP精品文档

相关文档