美文网首页
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实践

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