一步一步学写makefile (三) - 隐规则

来源:互联网 发布:冷藏软件 编辑:程序博客网 时间:2024/05/20 06:31

一步一步学写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
PROC = hello
CC = gcc
OBJECTS = hello.o func.o

$(PROC): $(OBJECTS)



PROC = hello
CC = gcc
OBJECTS = func.o

$(PROC): $(OBJECTS)
一下子简化了相当多。make就是make,专业滴。
观查输出发现可谓一气呵成。
gcc    -c -o hello.o hello.c
gcc    -c -o func.o func.c
gcc   hello.o func.o   -o hello
我们分析make的理解过程
生成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

当然处理过程是可以重定义的,不过在重定义之前要学会使用特殊变量,下节再详细介绍