一步一步学写makefile (三) - 隐规则
作者: 江淼Blog: http://blog.csdn.net/jiangfriend
时间: 2007-6-27 18:28
在学习特殊的变量之前,不得不先学习一下隐规则。隐规则可以理解为make对输入数据产生的默认动作。
回顾之前任务二是的makefile
#任务二的makefile
hello: hello.o func.o
gcc hello.o func.o -o hello
hello.o: hello.c
gcc -c hello.c -o hello.o
func.o: func.c func.h
gcc -c func.c -o func.o
在使用隐规则的情况下,我们把该makefile改写成
#使用潜规则的makefile一下子简化了相当多。make就是make,专业滴。
PROC = hello
CC = gcc
OBJECTS = hello.o func.o
$(PROC): $(OBJECTS)
或
PROC = hello
CC = gcc
OBJECTS = func.o
$(PROC): $(OBJECTS)
观查输出发现可谓一气呵成。
gcc -c -o hello.o hello.c我们分析make的理解过程
gcc -c -o func.o func.c
gcc hello.o func.o -o hello
生成hello需要hello.o与func.o
当%.o不存在时 寻找%.c并执行 $(CC) -c $(CPPFLAGS) $(CFLAGS) 进行编译
当所有的object已生成后执行 $(CC) $(LDFLAGS) $(LOADLIBES) $(LDLIBS)进行链接生成项目的最终目标hello
我们只需求对变量著如CC,CFLAGS等变量进行设置,余下的就交给make吧
这里列举几个常用的变量
名称 | 说明 | 缺省 |
CC | C编译器 | cc |
CFLAGS | C参数 | |
CXX | C++编译器 | g++ |
CXXFLAGS | C++参数 | |
CPP | C预处理,输出处理结果 | $(CC) -E |
CPPFLAGS | 预处理参数 | |
AR | ar | |
ARFLAGS | AR参数 | |
LDFLAGS | 链接参数 | |
条件 | 处理过程 |
%.o <- %.c | $(CC) -c $(CPPFLAGS) $(CFLAGS) |
%.o <- %.C,%.cpp,%.cc | $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) |
无扩展名 <- 需求的对象 | $(CC) $(LDFLAGS) $(LOADLIBES) $(LDLIBS) |
更详细的说明参见 http://www.gnu.org/software/make/manual/make.html#Using-Implicit
当然处理过程是可以重定义的,不过在重定义之前要学会使用特殊变量,下节再详细介绍