`
test_angel
  • 浏览: 51672 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

Makefile学习(8)

 
阅读更多

上周引入了隐含规则,这周继续学习学习一些理论哈!

make的每一条隐含规则都会在隐含规则库中出现,并且有顺序,且越靠前的则是越被经常使用的。

1.常见的隐含规则:

 

  • 编译 C 程序的隐含规则。

“<n>;.o” 的目标的依赖目标会自动推导为 “<n>;.c” ,并且其生成命令是 “$(CC) –c $(CPPFLAGS) $(CFLAGS)”

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

“<n>;.o” 的目标的依赖目标会自动推导为 “<n>;.cc” 或是 “<n>;.C” ,并且其生成命令是 “$(CXX) –c $(CPPFLAGS) $(CFLAGS)” 。(建议使用 “.cc” 作为 C++ 源文件的后缀,而不是 “.C”

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

“<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)”

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

“<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)”

  • 链接 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

如果没有一个源文件(如上例中的 x.c )和你的目标名字(如上例中的 x )相关联,那么,你最好写出自己的生成规则,不然,隐含规则会报错的。

  • Yacc C 程序时的隐含规则。

“<n>;.c” 的依赖文件被自动推导为 “n.y” Yacc 生成的文件),其生成命令是: “$(YACC) $(YFALGS)” 。( “Yacc” 是一个语法分析器,关于其细节请查看相关资料)

  • Lex C 程序时的隐含规则。

“<n>;.c” 的依赖文件被自动推导为 “n.l” Lex 生成的文件),其生成命令是: “$(LEX) $(LFALGS)” 。(关于 “Lex” 的细节请查看相关资料)

  • Lex Ratfor 程序时的隐含规则。

“<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. 隐含规则使用的变量

在隐含规则中的命令中,基本上都是使用了一些预先设置的变量。
我们可以把隐含规则中使用的变量分成两种:

  • 一种是命令相关的,如 “CC”
  • 一种是参数相的关,如 “CFLAGS”

下面是所有隐含规则中会用到的变量:


  • 关于命令的变量。

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》

    8. **规则的扩展性**:可以使用`include`指令引入其他makefile,便于模块化管理和共享规则。 9. **gnumakefile扩展**:GNU make提供了更多的功能,如函数式宏语言、多CPU并行构建(`-j`选项)和更复杂的条件控制等...

    Makefile学习参考资料.zip

    这个压缩包“Makefile学习参考资料.zip”包含了两份PDF文档,分别是“跟我一起学Makefile.pdf”和“gun_make.pdf”,很可能是关于Makefile的基础教程和GNU Make的官方文档。 在Makefile中,最重要的概念是目标...

    make以及makefile学习

    8. 编写makefile的原则 编写makefile时,需要遵循一些基本原则,比如保持makefile的简洁,尽量避免重复的规则定义。另外,需要合理安排目标和依赖的关系,以保证构建过程的正确性和高效性。 9. 开发者对makefile的...

    makefile 学习手册

    《Makefile学习手册》是一本专门针对Makefile开发的详细指南,旨在帮助读者从基础到深入地理解并掌握这一强大的构建工具。Makefile是软件工程中用于自动化编译和链接过程的重要文件,尤其在Unix/Linux环境中广泛使用...

    Makefile学习

    学习Makefile不仅是掌握其语法,更重要的是理解其背后的编译和链接机制。通过合理组织Makefile,可以高效地管理和自动化复杂的构建过程。对于程序员来说,了解Makefile是走向专业化的必经之路。特别是当涉及到跨平台...

    makefile学习三件套 电子书

    《makefile学习三件套 电子书》是一个针对makefile技术的综合学习资源,它包含了三个核心部分:《gnu make》、《GNU make中文手册》和《跟我一起写Makefile》。这些文档旨在帮助读者深入理解和掌握makefile的编写与...

    Make工具及makefile规则学习

    ### Make工具及makefile规则学习 #### 一、Make工具的功能 Make工具是一种自动化构建工具,主要用于管理和构建大型软件项目。其主要功能包括: - **避免不必要的重复编译**:通过检查文件的时间戳来确定哪些文件...

    Makefile学习资料.rar

    Makefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料.rarMakefile学习资料....

    Makefile 中文教程.pdf

    * 学习曲线陡峭:Makefile 的语法非常复杂,需要花费一些时间来学习和掌握。 * 不好 debug:Makefile 的错误信息不够明确, debug 相对困难。 Makefile 是一个功能强大且灵活的自动化编译工具,在软件开发过程中...

    Makefile学习笔记.docx

    Makefile学习笔记 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自动推导 ...

    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 学习pdf

    压缩包中的三份PDF文件分别对应以上三本书的内容,它们构成了一个完整的makefile学习资源库。首先,你可以通过《跟我一起写makefile》快速入门,了解makefile的基本构造和使用。然后,深入研究GNU Make Manual,掌握...

    Makefile教程,Makefile快速学习资料

    标题中提到的“Makefile教程”是指关于Makefile的学习资料,而“Makefile快速学习资料”说明本资料是为快速掌握Makefile编写的入门级教程。Makefile是Unix系统中的一个工具程序,主要用于软件开发中的自动化编译。它...

    makefile编写,学习linux c编程的必备

    通过学习和理解`makefile`,程序员不仅可以更好地组织和管理代码,还能提升大型项目的构建效率,这对于成为一名专业的Linux C程序员来说是必不可少的技能。因此,深入学习`makefile`的编写规则和实践是每个Linux C...

    makefile学习用测试文件.rar

    这个`makefile学习用测试文件.rar`很显然是为了帮助初学者理解和掌握`Makefile`的基本概念和用法。在本文中,我们将深入探讨`Makefile`的主要组成部分,以及如何编写和使用它来编译和管理项目。 `Makefile`的核心...

    makefile示例程序,学习用

    总结来说,这个“makefile示例程序”是一个很好的学习资源,通过它你可以掌握如何编写和使用Makefile来自动化构建项目,提高开发效率。在实际工作中,无论是小型的个人项目还是大型的团队协作,Makefile都是一个不可...

Global site tag (gtag.js) - Google Analytics