上周引入了隐含规则,这周继续学习学习一些理论哈!
make的每一条隐含规则都会在隐含规则库中出现,并且有顺序,且越靠前的则是越被经常使用的。
1.常见的隐含规则:
“<n>;.o”
的目标的依赖目标会自动推导为
“<n>;.c”
,并且其生成命令是
“$(CC) –c $(CPPFLAGS) $(CFLAGS)”
“<n>;.o”
的目标的依赖目标会自动推导为
“<n>;.cc”
或是
“<n>;.C”
,并且其生成命令是
“$(CXX) –c $(CPPFLAGS) $(CFLAGS)”
。(建议使用
“.cc”
作为
C++
源文件的后缀,而不是
“.C”
)
“<n>;.o”
的目标的依赖目标会自动推导为
“<n>;.p”
,并且其生成命令是
“$(PC) –c $(PFLAGS)”
。
-
编译
Fortran/Ratfor
程序的隐含规则。
“<n>;.o”
的目标的依赖目标会自动推导为
“<n>;.r”
或
“<n>;.F”
或
“<n>;.f”
,并且其生成命令是
:
“.f” “$(FC) –c $(FFLAGS)”
“.F” “$(FC) –c $(FFLAGS) $(CPPFLAGS)”
“.f” “$(FC) –c $(FFLAGS) $(RFLAGS)”
-
预处理
Fortran/Ratfor
程序的隐含规则。
“<n>;.f”
的目标的依赖目标会自动推导为
“<n>;.r”
或
“<n>;.F”
。这个规则只是转换
Ratfor
或有预处理的
Fortran
程序到一个标准的
Fortran
程序。其使用的命令是:
“.F” “$(FC) –F $(CPPFLAGS) $(FFLAGS)”
“.r” “$(FC) –F $(FFLAGS) $(RFLAGS)”
“<n>;.sym”
的目标的依赖目标会自动推导为
“<n>;.def”
,并且其生成命令是:
“$(M2C) $(M2FLAGS) $(DEFFLAGS)”
。
“<n.o>;”
的目标的依赖目标会自动推导为
“<n>;.mod”
,并且其生成命令是:
“$(M2C) $(M2FLAGS) $(MODFLAGS)”
。
“<n>;.o”
的目标的依赖目标会自动推导为
“<n>;.s”
,默认使用编译品
“as”
,并且其生成命令是:
“$(AS) $(ASFLAGS)”
。
“<n>;.s”
的目标的依赖目标会自动推导为
“<n>;.S”
,默认使用
C
预编译器
“cpp”
,并且其生成命令是:
“$(AS) $(ASFLAGS)”
。
“<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
如果没有一个源文件(如上例中的
x.c
)和你的目标名字(如上例中的
x
)相关联,那么,你最好写出自己的生成规则,不然,隐含规则会报错的。
“<n>;.c”
的依赖文件被自动推导为
“n.y”
(
Yacc
生成的文件),其生成命令是:
“$(YACC) $(YFALGS)”
。(
“Yacc”
是一个语法分析器,关于其细节请查看相关资料)
“<n>;.c”
的依赖文件被自动推导为
“n.l”
(
Lex
生成的文件),其生成命令是:
“$(LEX) $(LFALGS)”
。(关于
“Lex”
的细节请查看相关资料)
“<n>;.r”
的依赖文件被自动推导为
“n.l”
(
Lex
生成的文件),其生成命令是:
“$(LEX) $(LFALGS)”
。
-
从
C
程序、
Yacc
文件或
Lex
文件创建
Lint
库的隐含规则。
“<n>;.ln”
(
lint
生成的文件)的依赖文件被自动推导为
“n.c”
,其生成命令是:
“$(LINT) $(LINTFALGS) $(CPPFLAGS) -i”
。对于
“<n>;.y”
和
“<n>;.l”
也是同样的规则。
2.
隐含规则使用的变量
在隐含规则中的命令中,基本上都是使用了一些预先设置的变量。
我们可以把隐含规则中使用的变量分成两种:
下面是所有隐含规则中会用到的变量:
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
汇编语言编译器参数。(当明显地调用
“.s”
或
“.S”
文件时)。
CFLAGS
C
语言编译器参数。
CXXFLAGS
C++
语言编译器参数。
COFLAGS
RCS
命令参数。
CPPFLAGS
C
预处理器参数。(
C
和
Fortran
编译器也会用到)。
FFLAGS
Fortran
语言编译器参数。
GFLAGS
SCCS “get”
程序参数。
LDFLAGS
链接器参数。(如:
“ld”
)
LFLAGS
Lex
文法分析器参数。
PFLAGS
Pascal
语言编译器参数。
RFLAGS
Ratfor
程序的
Fortran
编译器参数。
YFLAGS
Yacc
文法分析器参数。
分享到:
相关推荐
makefile学习手册集合包括《跟我一起写makefile》《gnumakefile》
Makefile学习参考资料.zip
不错的makefile学习资料,数据makefile的进阶篇
纤细介绍如何编写makefile的文档,如何组织Makefile文件
Makefile学习笔记.docx
Makefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料....
makefile学习电子书,包含: gnu make GNU make中文手册 跟我一起写Makefile
很不错的makefile学习资料 很不错的makefile学习资料 很不错的makefile学习资料 很不错的makefile学习资料 很不错的makefile学习资料
一本 Makefile 开发手册,系统学习Makefile,pdf格式,由浅入深,通俗易懂。
Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动推导 ...
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但...
总结文档: 目录 1功能 2 Make 和Makefile的关系 3 makefile 规则 4 Make 命令行参数 5 如何使用 6关于Toscan中makefile文件的使用和说明 7 疑问
这是我自己学习Makefile的心得,包括在单目录下如何编写,在多目录下如何编译各自的源文件,在多目录下编译成静态库和动态库文件,以及链接库文件生成目标程序的Makefile,其中还有一些心得,希望能对刚刚学习...
关于make makefile 的学习资料. 介绍了make makefile 的语法等。
make中文手册等 小测试: # Readme: # use: make config # use: make dir # use: make # use: make clean # use: make rebuild # use: make cleanall # use: make test # use: make
Makefile学习教程.txt Makefile学习教程.txt Makefile学习教程.txt
Makefile学习.pdf
makefile编写,学习linux c编程的必备,makefile编写,学习linux c编程的必备
本篇文章详细阐述了unix环境下的make的使用,默认的编译器是UNIX下的GCC和CC。
makefile编写规则,快速学习了解makefile入门。