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