#7. 再谈make
make
是构建C程序的强大工具,但在本书中你只使用过一些简单的命令。为了看到更多make
神奇的功能,请阅读Robert Mecklenburg的《GNU Make项目管理》:
http://shop.oreilly.com/product/9780596006105.do
这里先列举make
的一些特性。
变量
变量可以大大缩短你的makefile,例如你想把一组标准的命令行选项传给gcc
,就可以把它们定义成变量:
- CFLAGS = -Wall -Wextra -v
- fred: fred.c
- gcc fred.c $(CFLAGS) -o fred
可以用等号(=)定义变量,然后用$(…)读取变量的值。
使用%、^和 @
很多编译命令看起来都很像:
fred: fred.c
gcc fred.c -Wall -o fred
这时你可以用%符号写一条更通用的“目标/生成方法”:
这些符号看起来有些奇怪。假设你想创建一个叫fred的文件,这条规则会让make去寻找一个叫fred.c的文件,然后生成方法会运行一条gcc
命令,用依赖项(由特殊符号$^
给出)创建目标fred(由$@
给出)。
隐式规则
make
工具对编译过程一清二楚,即使你不告诉它如何构建文件,它也可以使用隐式规则自行构建。例如,你有一个叫fred.c的文件,但没有makefile,可以用以下命令编译它:
原因是make
内置了一批生成方法。关于make
的更多信息,请参见: