Makefile+GDB 2011-03-09 make n当执行 make 时, make 会在当前目录下搜索 Makefile( 或 makefile) 文件, Makefile 中记录了源码如何编译的详细信息。 Make 会自动识别源码是否经过变动,自动更新执行文件。 n简化编译时所需要执行的命令 n若在编译完成之后,修改了某个源码文件,则 make 仅会针对被修改的文件进行编译,其他的目标文件不会更改 n最后可根据依赖性来更新执行文件 Make makefile n准备工作 n要使用 make ,必须编写一个叫做 Makefile 的文件,这个文件描述了软件包中文件之间的关系,提供更新每个文件的命令。一般在一个软件包里,通常是可执行文件靠目标文件来更新,目标文件靠编译源文件来更新。 n Makefile 写好之后,每次改变了某些源文件,只要执行 make 命令: n # make n所有必要的重新编译将执行。 Make 程序利用 makefile 中的数据和每个文件的最后修改时间来确定那个文件需要更新,对于需要更新的文件, make 程序执行 makefile 数据中定义的命令来更新。 n GNU make 的主要功能是读进一个文本文件 makefile 并根据 makefile 的内容执行一系列的工作。 n makefile 的默认文件名为 GNUmakefile 、 makefile 或 Makefile ,当然也可以在 make 的命令行中指定别的文件名。 n如果不特别指定, make 命令在执行时将按顺序查找默认的 makefile 文件。多数 Linux 程序员使用第三种文件名 Makefile 。因为第一个字母是大写,通常被列在一个目录的文件列表的最前面。 n Make – f <filename>: 它的作用是告诉 make 命令将哪个文件作为 makefile 文件。 n一个 Makefile 文件主要含有一系列的规则,每条规则包含以下内容。 n一个目标( target ),即 make 最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“ clean ”。 n一个或多个依赖文件( dependency )列表,通常是编译目标文件所需要的其他文件。 n一系列命今(command) ,是 make 执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为 TAB 字符。 Makefile 规则 n目标:目标文件 1 目标文件 2 。。。 n <tab> gcc -o 欲建立的执行文件目标文件 1 目标文件 2 。。。 n Makefile 中的#表示注释 n <tab> 要在命令行的第一个字符 n目标文件与相关文件之间需以“:”隔开 n # 以#开头的为注释行 n test : n gcc – o test n : n gcc – c – o n : n gcc – c – o n clean : n rm – f * .o n上面的 Makefile 文件中共定义了四个目标: test 、 、 和 clean 。目标从每行的最左边开始写,后面跟一个冒号(:),如果有与这个目标有依赖性的其他目标或文件,把它们列在冒号后面,并以空格隔开。然后另起一行开始写实现这个目标的一组命令。在 Makefile 中,可使用续行号(\)将一个单独的命令行延续成几行。但要注意在续行号( \)后面不能跟任何字符(包括空格和键)。 n一般情况下,调用 make 命令可输入: n # make target n target 是 Makefile 文件中定义的目标之一,如果省略 target , make 就将生成 Makefile 文件中定义的第一个目标。对于上面 Makefile 的例子,单独的一个“ make ”命令等价于: n # make test n因为 test 是 Makefile 文件中定义的第一个目标, make 首先将其读入,然后从第一行开始执行,把第一个目标 test 作为它的最终目标,所有后面的目标的更新都会影响到 test 的更新。第一条规则说明只要文件 test 的时间戳比文件 或 中的任何一个旧,下一行的编译命令将会被执行。
第三讲 GDB Makefile 来自淘豆网m.daumloan.com转载请标明出处.