课外扩展(四)

Makefile基本内容
谈到编译,对于新手的我们首先想到的肯定先想到gcc编译器。它的功能足够应付一般的小文件。但当我们一个软件里面的源文件达到成千上万时,gcc就显得力不从心了,这是必然需要一个新的编译工具站出来,给予我们方便,它就是工程管理器——make。首先我们建立一个工程的概念,一个工程下面有许多的子目录,子目录里面可以有许多目录或者源文件,这样一直嵌套下去,那么一个工程就会有许多的源文件。然后用工程管理器——make进行编译,这样就方便很多。工程管理器还有另一个优点,它会检查每个源文件的修改时间,只有在上一次编译之后被修改的源文件,才会在接下来的编译过程被编译和链接,这就避免了多余的编译工作量。故调试效率高。
要想学会使用make,就必须先学会编写makefile文件
(1)基本语法
Make工程管理器是完全根据Makefile文件中的编译规则命令进行工作的。Makefile 文件由以下三项基本内容组成。
1)需要生成的目标文件(target file)。
2)生成目标文件所需要的依赖文件(dependency file)。
3)生成目标文件的编译规则命令行(command)。
其语法规则如下:
目标:依赖一 依赖二
(Tab)命令行
目标即要生成的文件。如果目标文件的更新时间晚于依赖文件的更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则重新编译并更新目标。依赖指的是目标文件由哪些文件生成。如果依赖条件中存在不存在的依赖条件,则会寻找其它规则是否可以产生依赖条件。命令行是通过执行该命令,由依赖文件生成目标文件。注意每条命令前必须有且仅有一个 tab 保持缩进,这是语法要求。
(2)变量
变量是在makefile中定义的名字,用来代表一个文本字符串,该文本字符串称为该变量的值,引用时用$引用。在Makefile文件中,存在着大量的文件名,而且这些文件名都是重复出现的。所以在源文件比较多的情况下,很容易发生遗漏或写错文件名。而且一旦源文件的名称发生了变化,还容易造成与其他文件名不一致的错误。
使用方法: $(变量名)
makefile中几个常见的自动变量:
$ <:第一个依赖文件的名称;
$ ^:所有不重复的依赖文件,以空格分开;
$ @:目标文件的完整名称;
$ ?:所有时间戳比目标文件新的依赖文件,并以空格分开;
(3)伪目标
makefile伪目标:只执行命令,不生成对应文件 使用.PHONY:加文件名来生成伪目标
伪目标不是真正的目标文件,所以通过伪目标可以让Make工程管理器只执行规则命令,而不用创建实际的目标文件。
(4)函数
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
  $ (< function >; < arguments >;)或是$ {< function >; < arguments >;}
这里,< function >;就是函数名,make支持的函数不多。< arguments >;是函数的参数,参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。

发布了14 篇原创文章 · 获赞 1 · 访问量 477

猜你喜欢

转载自blog.csdn.net/a1152946932/article/details/105059994