3.7 使用 autotools

在上一小节,读者已经了解到了make 项目管理器的强大功能。的确,Makefile 可以帮助make 完成它的使命,但要承认的是,编写Makefile 确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成Makefile而同时又能让用户享受make 的优越性呢?本节要讲的autotools 系列工具正是为此而设的,它只需用户输入简单的目标文件、依赖文件、文件目录等就可以轻松地生成Makefile了,这无疑是广大用户的所希望的。另外,这些工具还可以完成系统配置信息的收集,从而可以方便地处理各种移植性的问题。也正是基于此,现在Linux 上的软件开发一般都用autotools 来制作Makefile,读者在后面的讲述中就会了解到。

3.7.1 autotools使用流程

正如前面所言,autotools 是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看)。

  • · aclocal
  • · autoscan
  • · autoconf
  • · autoheader
  • · automake

使用autotools主要就是利用各个工具的脚本文件以生成最后的Makefile。其总体流程是这样的。 Continue reading

3.6.4 Make管理器的使用

使用Make管理器非常简单,只需在make命令的后面键入目标名即可建立指定的目标,如果直接运行make,则建立Makefile中的第一个目标。

此外 make 还有丰富的命令行选项,可以完成各种不同的功能。下表3.17 列出了常用的make命令行选项。

表3.17 make的命令行选项

命 令 格 式 含 义

-C dir 读入指定目录下的Makefile

-f file 读入当前目录下的file文件作为Makefile

-i 忽略所有的命令执行错误

-I dir 指定被包含的Makefile所在目录

-n 只打印要执行的命令,但不执行这些命令

-p 显示make变量数据库和隐含规则

-s 在执行命令时不显示命令

-w 如果make在执行过程中改变目录,则打印当前目录名

3.6.2 Makefile变量

上面示例的Makefile在实际中是几乎不存在的,因为它过于简单,仅包含两个文件和一个命令,在这种情况下完全不必要编写Makefile 而只需在Shell 中直接输入即可,在实际中使用的Makefile往往是包含很多的文件和命令的,这也是Makefile产生的原因。下面就可给

出稍微复杂一些的Makefile进行讲解:

sunq:kang.o yul.o

Gcc kang.o bar.o -o myprog

kang.o : kang.c kang.h head.h

Gcc –Wall –O -g –c kang.c -o kang.o

yul.o : bar.c head.h

Gcc – Wall –O -g –c yul.c -o yul.o

在这个Makefile中有3 个目标体(target),分别为sunq、kang.o和yul.o,其中第一个目标体的依赖文件就是后两个目标体。如果用户使用命令“make sunq”,则make管理器就是找到sunq目标体开始执行。 Continue reading

3.6.1 Makefile基本结构

3.6.1 Makefile基本结构

Makefile 是Make 读入的惟一配置文件,因此本节的内容实际就是讲述Makefile 的编写规则。在一个Makefile中通常包含如下内容:

  • 需要由make工具创建的目标体(target),通常是目标文件或可执行文件;
  • 要创建的目标体所依赖的文件(dependency_file);
  • 创建每个目标体时需要运行的命令(command)。

它的格式为:

target: dependency_files

command

例如,有两个文件分别为hello.c 和hello.h,创建的目标体为hello.o,执行的命令为gcc Continue reading