zoukankan      html  css  js  c++  java
  • Makefile 12——改善编译效率

    从Makefile的角度看,一个可以改善编译效率的地方与其中的隐式规则有关。为了了解make的隐式规则,我们把之前的simple项目的Makefile做一点更改,删除生成.o文件的规则(与隐式规则相对应的是,在Makefile中定义的规则称为显示规则)。

     1 .PHONY: clean
     2 
     3 CC = gcc
     4 RM = rm
     5 
     6 EXE =simple
     7 SRCS =$(wildcard *.c)
     8 OBJS =$(patsubst %.c, %.o, $(SRCS))
     9 $(EXE): $(OBJS)
    10     $(CC) -o $@ $^
    11 #
    12 %.o : %.c
    13     $(CC) -o $@ -c $^删除这两句
    14 clean:
    15     $(RM) -rf $(EXE) $(OBJS)

    我们make一下,还是成功了,这就是make存在自带的隐式规则的缘故。

    在make中存在大量的隐式规则,通过隐式规则将大大简化Makefile的编写。这里简化后的Makefile之所以能工作,是因为make中有着下面这样的隐式规则:

    1 %.o :%.c
    2 
    3   $(CC) -c $(CPPFLAGS) $(CFLAGS)  $^

     

    make需要查找隐式规则会降低编译效率,为了禁止使用make所自带的隐式规则,可以通过make 的 -r选项来实现。

    所以,隐式规则是可以被覆盖的。当Makefile中自己定义了生成.o的文件规则时,make就以它为规则,该规则覆盖了make自带的隐式规则。更多隐式规则可以查看GNU MAKE。make -r的使用可以提高每个源文件的编译效率。

    恰当的书写注释是个好习惯。

    Makefile中的注释以“#”开始,注释多行可以在行末加上""。

  • 相关阅读:
    rxjs入门7之其它操作符复习
    rxjs入门6之合并数据流
    rxjs入门5之创建数据流
    rxjs入门4之rxjs模式设计
    boost_1.63.0编译VS2013
    c++基础类型之signed、unsigned的一个细节
    【排序】归并排序算法
    【排序】快速排序算法
    【排序】冒泡排序算法
    【排序】堆排序算法
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6889968.html
Copyright © 2011-2022 走看看