zoukankan      html  css  js  c++  java
  • 第16课

    1. 深入理解隐式规则

    当make发现目标的依赖不存在时

    1) 尝试通过依赖名逐一查找隐式规则

    2) 并且通过依赖名推导可能需要的源文件

         
        

     

    2. 隐式规则的副作用

    • 编译行为难以控制:大量使用隐式规则可能产生意想不到的编译行为

    • 编译效率低下:make从隐式规则和自定义规则中选择最终使用的规则,编译效率低

     

    3.隐式规则链

      当依赖的目标不存在时,make会极力组合各种隐式规则对目标进行创建,进而产生意料之外的编译行为。

        

    4. 查看隐式规则

    查看所有

      make -p 


    查看具体规则

      make - p |  grep xxx

    make -p | grep "%.o"

      

    编程实验:深入隐式规则 makefile.1

    func.p

    unit Func;
    
    interface
    
    procedure Greeting(); attribute (name = 'greeting');
    
    implementation
    
    procedure Greeting();
    begin
      WriteLn('Hello, Pascal!');
    end;
    
    
    end.

    main.c

    #include <stdio.h>
    
    extern void greeting();
    
    int main()
    {
        greeting();
        
        return 0;
    }    

    makefile.1

    app.out : main.o func.o
         $(CC) -lstdc++ -o $@ $^
         

    运行结果:

      

    增加func.c:

    func.c

    #include "stdio.h"
    
    void greeting()
    {
        printf("greeting
    ");
    }

    运行结果:

      

    5. 隐式规则的禁用

    • 局部禁用:

      1)在makefile中自定义规则

      2)在makefile中定义模式(如: %.o : %.p

    • 全局禁用:

      make -r

    6. 后缀规则简介

    • 后缀规则时旧式的模式规则

    • 可以通过后缀描述的方式自定义规则 

          
    • 双后缀规则:定义一对文件后缀(依赖文件后缀和目标文件后缀)
        
    • 单后缀规则:定义单个文件后缀(源文件后缀)
         
       

    7.后缀规则注意事项

    • 后缀规则不允许有依赖

    • 后缀规则必须有命令,否则无意义

    • 后缀规则将逐步被模式规则取代

    编程实验:后缀规则初体验 makefile.2

    app.out : main func.o
    
         $(CC) -lstdc++ -o $@ $^
    
    
    .c.o :
        @echo "my suffix rule"
        $(CC) -o $@ -c $^
        
    .c :
        @echo "my suffix rule"
        $(CC) -o $@ -c $^
        

    运行结果:

      

    8.小结

    • 隐式规则可能造成意想不到的编译行为

    • 在实际工程项目中尽量不使用隐式规则

    • 后缀规则是一种旧式的模式规则

    • 后缀规则正逐步被模式规则取代

  • 相关阅读:
    Hive内部表外部表转化分析
    20130515
    mapred.local.dir
    经典
    hive中巧用正则表达式的贪婪匹配
    做生意十大忌
    股价是最没有用的东西,要看公司基本面和盈利
    textView文本不同颜色
    Android中扫描wifi热点
    android 与 PC的socket通信
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265751.html
Copyright © 2011-2022 走看看