上周引入了隐含规则,这周继续学习学习一些理论哈!
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
文法分析器参数。
分享到:
相关推荐
8. **规则的扩展性**:可以使用`include`指令引入其他makefile,便于模块化管理和共享规则。 9. **gnumakefile扩展**:GNU make提供了更多的功能,如函数式宏语言、多CPU并行构建(`-j`选项)和更复杂的条件控制等...
这个压缩包“Makefile学习参考资料.zip”包含了两份PDF文档,分别是“跟我一起学Makefile.pdf”和“gun_make.pdf”,很可能是关于Makefile的基础教程和GNU Make的官方文档。 在Makefile中,最重要的概念是目标...
8. 编写makefile的原则 编写makefile时,需要遵循一些基本原则,比如保持makefile的简洁,尽量避免重复的规则定义。另外,需要合理安排目标和依赖的关系,以保证构建过程的正确性和高效性。 9. 开发者对makefile的...
《Makefile学习手册》是一本专门针对Makefile开发的详细指南,旨在帮助读者从基础到深入地理解并掌握这一强大的构建工具。Makefile是软件工程中用于自动化编译和链接过程的重要文件,尤其在Unix/Linux环境中广泛使用...
学习Makefile不仅是掌握其语法,更重要的是理解其背后的编译和链接机制。通过合理组织Makefile,可以高效地管理和自动化复杂的构建过程。对于程序员来说,了解Makefile是走向专业化的必经之路。特别是当涉及到跨平台...
《makefile学习三件套 电子书》是一个针对makefile技术的综合学习资源,它包含了三个核心部分:《gnu make》、《GNU make中文手册》和《跟我一起写Makefile》。这些文档旨在帮助读者深入理解和掌握makefile的编写与...
### Make工具及makefile规则学习 #### 一、Make工具的功能 Make工具是一种自动化构建工具,主要用于管理和构建大型软件项目。其主要功能包括: - **避免不必要的重复编译**:通过检查文件的时间戳来确定哪些文件...
Makefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料....
* 学习曲线陡峭:Makefile 的语法非常复杂,需要花费一些时间来学习和掌握。 * 不好 debug:Makefile 的错误信息不够明确, debug 相对困难。 Makefile 是一个功能强大且灵活的自动化编译工具,在软件开发过程中...
Makefile学习笔记 Makefile是一个编译系统自动构建工具,它可以根据源文件的变化自动编译和链接对象文件,并生成执行文件。Makefile文件包含了一系列的规则和命令,这些规则和命令描述了如何从源文件生成目标文件。...
Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动推导 ...
make中文手册等 小测试: # Readme: # use: make config # use: make dir # use: make # use: make clean # use: make rebuild # use: make cleanall # use: make test # use: make
压缩包中的三份PDF文件分别对应以上三本书的内容,它们构成了一个完整的makefile学习资源库。首先,你可以通过《跟我一起写makefile》快速入门,了解makefile的基本构造和使用。然后,深入研究GNU Make Manual,掌握...
标题中提到的“Makefile教程”是指关于Makefile的学习资料,而“Makefile快速学习资料”说明本资料是为快速掌握Makefile编写的入门级教程。Makefile是Unix系统中的一个工具程序,主要用于软件开发中的自动化编译。它...
通过学习和理解`makefile`,程序员不仅可以更好地组织和管理代码,还能提升大型项目的构建效率,这对于成为一名专业的Linux C程序员来说是必不可少的技能。因此,深入学习`makefile`的编写规则和实践是每个Linux C...
这个`makefile学习用测试文件.rar`很显然是为了帮助初学者理解和掌握`Makefile`的基本概念和用法。在本文中,我们将深入探讨`Makefile`的主要组成部分,以及如何编写和使用它来编译和管理项目。 `Makefile`的核心...
总结来说,这个“makefile示例程序”是一个很好的学习资源,通过它你可以掌握如何编写和使用Makefile来自动化构建项目,提高开发效率。在实际工作中,无论是小型的个人项目还是大型的团队协作,Makefile都是一个不可...