Makefile的常见的隐含规则整理

根据陈皓的《跟我一起写 Makefile》(http://blog.csdn.net/haoel/article/details/2886/),继续对Makefile的常见的隐含规则进行整理,如下:

1.    编译C程序的隐含规则。

“<n>.o”的目标的依赖目标会自动推导为“<n>.c”,

生成命令:$(CC) –c $(CPPFLAGS) $(CFLAGS)

2 编译C++程序的隐含规则。

“<n>.o”的目标的依赖目标会自动推导为“<n>.cc”或是“<n>.C”

生成命令是“$(CXX) –c $(CPPFLAGS) $(CFLAGS)”。

3 编译Pascal程序的隐含规则。

“<n>.o”的目标的依赖目标会自动推导为“<n>.p”

生成命令是“$(PC) –c $(PFLAGS)”。

4 编译Fortran/Ratfor程序的隐含规则。

“<n>.o”的目标的依赖目标会自动推导为“<n>.r”或“<n>.F”或“<n>.f”

生成命令是:

“.f” “$(FC) –c $(FFLAGS)”

“.F” “$(FC) –c $(FFLAGS) $(CPPFLAGS)”

“.f” “$(FC) –c $(FFLAGS) $(RFLAGS)”

5 预处理Fortran/Ratfor程序的隐含规则。

“<n>.f”的目标的依赖目标会自动推导为“<n>.r”或“<n>.F”。这个规则只是转换Ratfor或有预处理的Fortran程序到一个标准的Fortran程序。

命令是:

“.F” “$(FC) –F $(CPPFLAGS) $(FFLAGS)”

“.r” “$(FC) –F $(FFLAGS) $(RFLAGS)”

6 编译Modula-2程序的隐含规则。

“<n>.sym”的目标的依赖目标会自动推导为“<n>.def”

生成命令是:“$(M2C) $(M2FLAGS) $(DEFFLAGS)”。“<n.o>” 的目标的依赖目标会自动推导为“<n>.mod”,并且其生成命令是:“$(M2C) $(M2FLAGS) $(MODFLAGS)”。

7、汇编和汇编预处理的隐含规则。

“<n>.o” 的目标的依赖目标会自动推导为“<n>.s”,默认使用编译品“as”

生成命令:“$(AS) $(ASFLAGS)”。“<n>.s” 的目标的依赖目标会自动推导为“<n>.S”,默认使用C预编译器“cpp”,并且其生成命令是:“$(AS) $(ASFLAGS)”。

8、链接Object文件的隐含规则。

“<n>”目标依赖于“<n>.o”,通过运行C的编译器来运行链接程序生成(一般是“ld”)

生成命令:“$(CC) $(LDFLAGS) <n>.o $(LOADLIBES) $(LDLIBS)”。

这个规则对于只有一个源文件的工程有效,同时也对多个Object文件(由不同的源文件生成)的也有效。

x : y.o z.o 并且“x.c”、“y.c”和“z.c”都存在时,隐含规则将执行如下命令:

cc -c x.c -o x.o

cc -c y.c -o y.o

cc -c z.c -o z.o

cc x.o y.o z.o -o x

rm -f x.o

rm -f y.o

rm -f z.o

9、Yacc C程序时的隐含规则。

“<n>.c”的依赖文件被自动推导为“n.y”(Yacc生成的文件)

生成命令:“$(YACC) $(YFALGS)”。

10、Lex C程序时的隐含规则。

“<n>.c”的依赖文件被自动推导为“n.l”(Lex生成的文件)

生成命令:“$(LEX) $(LFALGS)”

11、Lex Ratfor程序时的隐含规则。

“<n>.r”的依赖文件被自动推导为“n.l”(Lex生成的文件)

生成命令:“$(LEX) $(LFALGS)”。

12、从C程序、Yacc文件或Lex文件创建Lint库的隐含规则。

“<n>.ln” (lint生成的文件)的依赖文件被自动推导为“n.c”

生成命令:“$(LINT) $(LINTFALGS) $(CPPFLAGS) -i”。对于“<n>.y”和“<n>.l”也是同样的规则。


隐含规则中可能用到的命令:

命令名

意义

默认命令

AR

函数库打包程序

ar

AS

汇编语言编译程序

as

CC

C语言编译程序

cc

CXX

C++语言编译程序

g++

CO

RCS文件中扩展文件程序

co

CPP

C程序的预处理(输出是标准输出设备)

$(CC) -E

FC

Fortran 和 Ratfor 的编译器和预处理程序。

f77

GET

从SCCS文件中扩展文件的程序

get

LEX

Lex方法分析器程序(针对于C或Ratfor)

lex

PC

Pascal语言编译程序。

pc

YACC

Yacc文法分析器(针对于C程序)。

yacc

YACCR

Yacc文法分析器(针对于Ratfor程序)

yacc –r

MAKEINFO

转换Texinfo源文件(.texi)到Info文件程序。

makeinfo

TEX

从TeX源文件创建TeX DVI文件的程序。

tex

TEXI2DVI

从Texinfo源文件创建军TeX DVI 文件的程序

texi2dvi

WEAVE

转换Web到TeX的程序

weave

CWEAVE

转换C Web 到 TeX的程序。

cweave

TANGLE

转换Web到Pascal语言的程序

tangle

CTANGLE

转换C Web 到 C。

ctangle

RM

删除文件命令

rm –f


上述命令中的相关参数变量:

变量名

意义

默认值

ARFLAGS

AR命令的参数

rv

ASFLAGS

AS命令的参数

 

CFLAGS

C语言编译程序(CC)的参数

 

CXXFLAGS

C++语言编译器参数。

 

COFLAGS

RCS命令参数。

 

CPPFLAGS

C预处理器参数

 

FFLAGS

Fortran语言编译器参数

 

GFLAGS

SCCS “get”程序参数。

 

LDFLAGS

链接器参数。(如:“ld”)

 

LFLAGS

Lex文法分析器参数。

 

PFLAGS

Pascal语言编译器参数。

 

RFLAGS

Ratfor 程序的Fortran 编译器参数。

 

YFLAGS

Yacc文法分析器参数。

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值