美文网首页
Makefile实践

Makefile实践

作者: Jiafu | 来源:发表于2018-03-04 14:29 被阅读0次
公共文件

把通用的变量定义、函数定义、编译模板都抽象出来,定义到单独的文件中,然后在每一个Makefile文件中,引入公共的文件。

分层

大的工程通常都有好几个子目录,一层套一层,所以通常每一层都对应一个Makefile,一层层深入。

并发

对于大工程来讲,需要让Makefile在编译的时候可以尽量地并发。make -j {并发数} 可以达到这个目的。

为了达到并发的目的,编译的时候,可以分阶段来进行,每个阶段可以尽量地并发。例如如果编译的结果是生成一个可执行的二进制文件,可以分两个阶段,第一个阶段叫编译阶段,第二个阶段叫链接阶段。编译阶段负责把.c编译成.o,这个过程可以完全地并发。链接阶段把.o链接成最后的可执行文件。

清理

记得在编译后,清理无用的临时文件,在编译过程中,可能会生成大量的.o临时文件,在工程巨大的时候,这些临时文件会占用大量的空间,编译完成后删除它们是一个不错的选择。

模板

Makefile其实基本上是类似的,可以使用模板,把常规的编译动作都抽象出来。

  • 子目录模式:编译指定子目录下的Makefile
  • 目标文件模式:对于每个.c,编译成对应的.o
  • lib模式:对于每个.c,编译成对应的.o,然后再生成动态或者静态库。
Makefile目标动作

上面提到,为了尽可能地并行构建,把构建的动作分成几个部分,例如编译阶段,链接阶段,打包阶段等等,各个阶段内部是可以完全并行的,但是阶段与阶段之间,是串行的。
典型的目标动作有:

  • compile:将.c编译成.o
  • link:将.o链接成可执行程序,或者.a和.so
  • all: all一般相当于是compile + link
  • clean:清理所有编译后的结果
  • cleantemp:清理无用的临时文件

相关文章

  • Makefile实践

    公共文件 把通用的变量定义、函数定义、编译模板都抽象出来,定义到单独的文件中,然后在每一个Makefile文件中,...

  • 12使用 Go 管理版本

    简介 如何实现 实践 修改 Makefile 总结 当前部分的代码 简介 如果你曾经运行过 docker vers...

  • 实践5 . Makefile文件编写

    1 简介 Makefile是用来完成构建,编译整个工程文件的工具。所以,Makefile定义了一系列的规则,按照这...

  • 编写Makefile及简单分析

    makefile的好处:一次编写,终身受益 makefile的命名规则: makefile Makefile ma...

  • Makefile 工程管理

    Ⅰ Makefile的用途 Ⅱ Makefile的构成 Ⅲ Makefile构成-----规则 Ⅳ Makefil...

  • win_c/c++ mess01

    1. win makefile 1.1 win makefile,eg: 1.2 makefile explai...

  • [C] Makefile

    Makefile Blog [Makefile的简便写法] [Makefile]菜鸟教程 [gcc编译声明问题] ...

  • 迅为IMX6ULL开发板Ubuntu下C编程入门(二)

    本文是介绍3.3 初识 Makefile+3.4Makefile语法 3.3初识Makefile 3.3.1什么是...

  • Make

    make 目标 顶层 Makefile 作为入口, 来调用其他 makefile, 顶层 makefile 一般有...

  • Makefile学习笔记

    Makefile学习笔记 学习Makefile的资料 《跟我一起写makefile》 《GUN make manu...

网友评论

      本文标题:Makefile实践

      本文链接:https://www.haomeiwen.com/subject/dmnffftx.html