没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
第一章:概述
概述
环境下的程序员如果不会使用来构建和管理自己的工程,
应该不能算是一个合格的专业程序员,至少不能称得上是 程序员。在
()环境下使用的工具能够比较容易的构建一个属于你自
己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后
的执行。不过这需要我们投入一些时间去完成一个或者多个称之为文
件的编写。此文件正是正常工作的基础。
所要完成的文件描述了整个工程的编译、连接等规则。其中包括:
工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创
建这些库文件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复
杂的事情,但是为工程编写的好处是能够使用一行命令来完成“自动化
编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的。编
译整个工程你所要做的唯一的一件事就是在提示符下输入命令。整
个工程完全自动编译,极大提高了效率。
是一个命令工具,它解释中的指令(应该说是规则)。在
文件中描述了整个工程所有文件的编译顺序、编译规则。有自
己的书写格式、关键字、函数。像语言有自己的格式、关键字和函数一样。
而且在中可以使用系统 所提供的任何命令来完成想要的工作 。
(在其它的系统上可能是另外的文件名)在绝大多数的开发环境中
都在使用,已经成为一种工程的编译方法。
目前,系统完整的介绍工具和如何编写的中文文档比较少。
我整理这个文档就是希望能使众多的环境下的程序员能够比较容易的掌握
和学会使用。本文所要介绍的是的,采用
(包括最新发布的系统)所集成的工具。
本文中所有示例均采用语言的源程序,因为它是目前最普遍使用的一种
语言。当然工具不仅仅是用来管理语言工程的,那些编译器只要能够在
下运行的语言所构建的工程都可以使用工具来管理。工作不仅
仅可以用来编译源代码,它也可以完成一些其它的功能。例如,有这样的需求:
当我们修改了某个或者某些文件后,需要能够根据修改的文件来自动对相关文
件进行重建或者更新。那么应该考虑使用工具。工具为
我们实现这个目的提供了非常有利的支持。工程中根据源文件的修改情况来进
行代码的编译正是使用了的这个特征。执行时,根据的规
则检查文件的修改情况,决定是否执行定义的动作(那些修改过的文件将会被
重新编译)。这是的执行依据。
准备知识
在开始我们关于的讨论之前,首先需要明确一些基本概念:
编译:把高级语言书写的代码转换为机器可识别的机器指令。编译高级语
言后生成的指令虽然可被机器识别,但是还不能被执行。编译时,编译器检查
高级语言的语法、函数与变量的声明是否正确。只有所有的语法正确、相关变
量定义正确编译器就可以编译出中间目标文件。通常,一个高级语言的源文件
都可对应一个目标文件。目标文件在中默认后缀为“ ”(如“ !”的目标
文件为“ ”)。
为了和规则的目标文件相区别。本文将编译高级语言后生成的目标文件成
为文件。
链接:将多 文件,或者 文件和库文件链接成为可被操作系统执行的可
执行程序(环境下,可执行文件的格式为“”格式)。链接器不检查函
数所在的源文件,只检查所有 文件中的定义的符号。将 文件中使用的函数
和其它 或者库文件中的相关符号进行合并,对所有文件中的符号进行重新安
排(重定位),并链接系统相关文件(程序启动文件等)最终生成可执行程序。
链接过程使用的“”工具。
静态库:又称为文档文件("#!$)。它是多个 文件的集合。
中静态库文件的后缀为“”。静态库中的各个成员( 文件)没有特殊的存在格
式,仅仅是一个 文件的集合。使用“#”工具维护和管理静态库。
共享库:也是多个 文件的集合,但是这些 文件时有编译器按照一种特
殊的方式生成(中,共享库文件格式通常为“”格式。共享库已经具备
了可执行条件)。模块中各个成员的地址(变量引用和函数调用)都是相对地
址。使用此共享库的程序在运行时,共享库被动态加载到内存并和主程序在内
存中进行连接。多个可执行程序可共享库文件的代码段(多个程序可以共享的
使用库中的某一个模块,共享代码,不共享数据)。另外共享库的成员对象可
被执行(由% 提供支持)。
参考 了解更加详细的关于 的说明和用法。@@@
第二章:介绍
在执行时,需要一个命名为的文件。这个文件告诉以
何种方式编译源代码和链接程序。典型地,可执行文件可由一些 文件按照一
定的顺序生成或者更新。如果在你的工程中已经存在一个活着多个正确的
。当对工程中的若干源文件修改以后,需要根据修改来更新可执行文
件或者库文件,正如前面提到的你只需要在下执行“”。会自动
根据修改情况完成源文件的对应 文件的更新、库文件的更新、最终的可执行
程序的更新。
通过比较对应文件(规则的目标和依赖,)的最后修改时间,来决定
哪些文件需要更新、那些文件不需要更新。对需要更新的文件就执行数据
库中所记录的相应命令(在读取以后会建立一个编译过程的描述
数据库。此数据库中记录了所有各个文件之间的相互关系,以及它们的关系描
述)来重建它,对于不需要重建的文件什么也不做。
而且可以通过的命令行选项来指定需要重新编译的文件。
&# %'(
)))))))))))))))))
* $+# %,-. #* .$ %(/+#+ #
$ +#0,! +# *(%,(,,
' ##+ #(%(/#* .$!* #%(#*##
! #*** ! ,* .##*( 1.
!#,#* %% ( # /#+ # 0.%(
! 2
' ##+ #(%( ##*( * #/#*
+ %#+# !+# %13!
#-.($* /!(*## # #,#((1& .
+#+#(4.% !+ * ##+ #15
(#(/%# * 6# # * #
! 4* ! ,*,! , ,+
! 1*/%# +,* +! !!#0,+
!,#+# %,#* !
7!* $+#!+# %* !#+ # , ,*#
!# ! 4
1
11111111%(68( #(
1
# #5%6%+# 9!( /4
1
11111111+4::$( #(:+# 9!::
1
# % $/+%!# !$# %#
-.* #(1; !( # ,! -66
$# .1'# !*+ ! +#(** #
(17,* % # %* ( +#
!
-
以上时的%(反馈方式。如果在你使用过程中。发现
%(或者问题。可以通过以上的方式和渠道反馈。
好了。开始我们的神奇之旅吧!@
1简介
在执行之前,需要一个命名为的特殊文件(本文的后续将使
用作为这个特殊文件的文件名)来告诉需要做什么(完成什么任
务),该怎么做。通常,工具主要被用来进行工程编译和程序链接。
本节将分析一个简单的,它对一个包含<个的源代码和三个头文
件的工程进行编译和链接。这个提供给了必要的信息,程
序根据中的规则描述执行相关的命令来完成指定的任务(如:编译、
链接和清除编译过程文件等)。复杂的我们将会在本文后续进行讨论。
当使用工具进行编译时,工程中以下几种文件在执行时将会被
编译(重新编译):
所有的源文件没有被编译过,则对各个源文件进行编译并进行链接,
生成最后的可执行程序;
每一个在上次执行之后修改过的源代码文件在本次执行时
将会被重新编译;
头文件在上一次执行之后被修改。则所有包含此头文件的源文
件在本次执行时将会被重新编译。
后两种情况是只将修改过的源文件重新编译生成 文件,对于没有
修改的文件不进行任何工作。重新编译过程中,任何一个源文件的修改将产生
新的对应的 文件,新的 文件将和以前的已经存在、此次没有重新编译的 文
件重新连接生成最后的可执行程序。
首先让我们先来看一些 相关的基本知识。@@
规则介绍
一个简单的描述规则组成:
#(:规则的目标。通常是最后需要生成的文件名或者为了实现这个目的
而必需的中间过程文件名。可以是 文件、也可以是最后的可执行程序的文件
名等。另外,目标也可以是一个执行的动作的名称,如目标“!”,我
们称这样的目标是“伪目标”。
+##=:规则的依赖。生成规则目标所需要的文件名列表。通常一
个目标依赖于一个或者多个文件。
! :规则的命令行。是规则所要执行的动作(任意的命令或者
是可在下执行的程序)。它限定了执行这条规则时所需要的动作。
一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必
须以字符开始,字符告诉此行是一个命令行。按照命令
完成相应的动作。这也是书写中容易产生,而且比较隐蔽的错误。
命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述。一
个目标可以没有依赖而只有动作(指定的命令)。比如 中的目标
“!”,此目标没有依赖,只有命令。它所定义的命令用来删除过程产
生的中间文件(进行清理工作)。
在中“规则”就是描述在什么情况下、如何重建规则的目标文件,通
常规则中包括了目标的依赖关系(目标的依赖文件)和重建目标的命令。
执行重建目标的命令,来创建或者重建规则的目标(此目标文件也可以是触发
这个规则的上一个规则中的依赖文件)。规则包含了文件之间的依赖关系和更
新此规则目标所需要的命令。
一个文件中通常还包含了除规则以外的很多东西(后续我们会一
步一步的展开)。一个最简单的可能只包含规则。规则在有些
中可能看起来非常复杂,但是无论规则的书写是多么的复杂,它都符合规则的
基本格式。
程序根据规则的依赖关系,决定是否执行规则所定义的命令的过程我
们称之为执行规则。
简单的示例
本小节开始我们在第一小节中提到的例子。此例子由个头文件和<个文
件组成。我们将书写一个简单的,来描述如何创建最终的可执行文件
“”,此可执行文件依赖于<个源文件和个头文件。文件的内容如
下:
1
!"#$ #%#" # &#'
"(!#(%##)!#
剩余63页未读,继续阅读
蜜汁小强
- 粉丝: 72
- 资源: 62
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0