Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1589244
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: C/C++

2010-07-09 14:54:16

作者: 江淼
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)

更详细的说明参见

当然处理过程是可以重定义的,不过在重定义之前要学会使用特殊变量,下节再详细介绍
阅读(846) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~