一步一步学写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一下子简化了相当多。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吧
这里列举几个常用的变量
名称
说明
缺省
C++参数
LDFLAGS
链接参数
说明
缺省
CC
C编译器
cc
CFLAGS
C参数
CXX
C++编译器
g++
CXXFLAGSC++参数
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)
处理过程
%.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
当然处理过程是可以重定义的,不过在重定义之前要学会使用特殊变量,下节再详细介绍
- 一步一步学写makefile (三) - 隐规则
- 一步一步学写makefile
- 一步一步学写makefile (一)
- 【makefile】一起写makefile(三)--Makefile书写规则
- 一步一步学写makefile (二) - 变量的使用
- 一步一步写makefile
- 一步一步写万能makefile
- 一步一步写makefile
- 一步一步写Makefile(3):伪目标,静态规则,shell命令和去回显,嵌套执行Makefile
- 一步一步学Makefile (1)
- 一步一步学Struts(三)
- 一步一步学jQuery(三)
- 跟我一起写Makefile(三):书写规则
- 学写Makefile
- 学写Makefile
- 学写makefile
- 学写makefile
- Makefile规则(三):变量
- 基于gridview的三层结构的代码演示 (一) 三层架构的实例演示(原创 如需转载请联系作者)
- VB 2005 中用P/Invoke进行windows HOOK 的方法
- Velocity Suite 1.2.3 for dreamweaver
- Oracle NUMBER类型细讲
- SQL Server 2000異地數據庫數據同步_6
- 一步一步学写makefile (三) - 隐规则
- 如何过滤层中要显示的Features
- C++-static_cast揭密
- 锻炼自己拥有平和的心态
- Using CREATE TABLE AS SELECT (CTAS) to Reorganize Oracle Tables
- 基于gridview的三层结构的代码演示 (二 ) 三层架构的实例演示 (原创,如需转载请联系作者)
- 企業資源規劃
- 55种网页常用小技巧(javascript)
- Oracle删除重复记录的方法