#7. 再谈make

make是构建C程序的强大工具,但在本书中你只使用过一些简单的命令。为了看到更多make神奇的功能,请阅读Robert Mecklenburg的《GNU Make项目管理》:

http://shop.oreilly.com/product/9780596006105.do

这里先列举make的一些特性。

变量

变量可以大大缩短你的makefile,例如你想把一组标准的命令行选项传给gcc,就可以把它们定义成变量:

  1. CFLAGS = -Wall -Wextra -v
  2.  
  3. fred: fred.c
  4. gcc fred.c $(CFLAGS) -o fred

可以用等号(=)定义变量,然后用$(…)读取变量的值。

使用%、^和 @

很多编译命令看起来都很像:

  1. fred: fred.c
  2. gcc fred.c -Wall -o fred

这时你可以用%符号写一条更通用的“目标/生成方法”:

#7. 再谈make - 图1

这些符号看起来有些奇怪。假设你想创建一个叫fred的文件,这条规则会让make去寻找一个叫fred.c的文件,然后生成方法会运行一条gcc命令,用依赖项(由特殊符号$^给出)创建目标fred(由$@给出)。

隐式规则

make工具对编译过程一清二楚,即使你不告诉它如何构建文件,它也可以使用隐式规则自行构建。例如,你有一个叫fred.c的文件,但没有makefile,可以用以下命令编译它:

#7. 再谈make - 图2

原因是make内置了一批生成方法。关于make的更多信息,请参见:

http://www.gnu.org/software/make/